Webpack

1. webpack概念

//# 概念
	webpack是自动化构建工具(静态模块打包器)
//# 打包文本
	a. 默认打包js文件, 如果要打包其他资源,需要配置对应loader(加载器)
//# 打包方式
	需要一个打包入口(将所有依赖项一起打包),打包后生成一个静态资源文件(打包出口)

2. webpack 5大核心 - 记住

//# entry ( 入口 )  
	一定是js文件
	
//# output ( 出口 ) 
	打包后的文件一般存放在dist目录下

//# loader ( 加载器 ) 
	webpack打包js文件,要想打包其他资源,必须配置loader

//# plugins ( 插件 ) 
	一些复杂的配置需要插件,高大上配置

//# mode  ( 模式 ) 
	development 开发模式 - 代码本地调试使用  production -生产模式  线上环境使用    

3.使用webpack步骤

//# 创建项目fitness

//# 初始化包描述文件
	yarn init -y

//# 创建项目目录src

//# 本地安装webpack 和 webpack-cli  === 安装webpack命令
	yarn add webpack@5.73.0 webpack-cli@4.10.0 -D


【打包js文件】

//# 在项目根目录 创建webpack配置文件
webpack.config.js

//# 在配置文件中webpack.config.js 配置webpack

//引入node内置模块,无需下载,直接引入
const path = require('path')

//暴露webpack对象
module.exports = {

    //入口entry
    entry: './src/js/index.js',

    //出口output
    output: {
        path: path.resolve(__dirname, 'dist'), //出口路径
        filename: 'bundle.js'//输出文件名字
    },

    //加载器loader
    
    //插件plugins
   
    //模式mode
    mode: 'development'
}
//# 配置package.json文件
{
    "scripts": {
        "build": "webpack"
     },
}

4. 打包css

//# 下载模块
yarn add css-loader@6.7.1 style-loader@3.3.1 -D

//# 配置loader
module: {
    rules: [
        {
            test: /\.css$/,
            use: ['style-loader', 'css-loader']  //顺序不能换
        }
    ]
}

5. 打包less

//# 下载模块
yarn add less-loader@11.0.0 less@4.1.3 -D

//# 配置loader
rules: [       
    {
        test: /\.less$/,
        use: ['style-loader', 'css-loader', 'less-loader']
    }
]

6. 打包背景图

//# 下载模块
yarn add url-loader@4.1.1 file-loader@6.2.0 -D

//# 配置loader
rules: [
    {
      test: /\.(jpg|png|gif|jpeg)$/,
      loader: "url-loader",
      options: {
        name: "[hash:16].[ext]", // 图片输出的名字hash长度16位 默认32位
        limit: 50 * 1024, // 小于10kb base64处理
        outputPath: "imgs", //输出路径
        esModule: false, //关闭es6模块化
      },
      type: "javascript/auto",
    },
]

7.打包插入图

//# 下载模块
yarn add html-loader@3.1.2 html-webpack-plugin@5.5.0 -D

//# 配置loader
rules: [
    {
      test: /\.(jpg|png|gif|jpeg)$/,
      loader: "url-loader",
      options: {
        name: "[hash:16].[ext]", // 图片输出的名字hash长度16位 默认32位
        limit: 50 * 1024, // 小于10kb base64处理
        outputPath: "imgs", //输出路径
        esModule: false, //关闭es6模块化
      },
      type: "javascript/auto",
    },

    {
      test: /\.html$/, // 处理html中引入img
      loader: "html-loader",
    },
]

//# 配置插件
//处理html的插件
const HtmlWebpackPlugin = require('html-webpack-plugin')

//插件plugins
plugins: [
    //处理html
    new HtmlWebpackPlugin({
      template: "./src/page/home/home.html", // 把home.html复制到dist中 自动引入资源文件
      filename: "home.html", //出口名字
      //chunks: ['home']  //引入js资源
    }),
]

//# 配置出口的公共路径
//出口output
output: {
    path: path.resolve(__dirname, 'dist'), //出口路径
    filename: 'home.js',//输出文件名字
    publicPath: './'
}

//# 在home.html页面中删除script标签
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- <script src="../dist/home.js"></script> -->
</head>

8. 打包字体图标

//# 下载模块
//yarn add file-loader@6.2.0 -D (之前下载过,无需下载)

//# 配置loader
rules: [
	{
      test: /\.(eot|svg|ttf|woff|woff2)$/, // 处理字体格式文件
      type: "asset/resource",
      generator: {
        filename: "fonts/[name].[hash:6][ext]",
      },
    },
]

9. 编译ES6到ES5

//# 下载模块
yarn add babel-core@6.26.3 babel-loader@7.1.5 babel-preset-es2015@6.24.1 -D

//# 配置loader
rules: [
	{
        test: /\.js$/,
        loader: 'babel-loader',    // loader 编译es6为es5
        exclude: /node_modules/  // 排除
    }
]

//# 项目根目录创建 .babelrc文件
    {
      "presets": [
          "es2015"
      ], 
      "plugins": []
    }

10. 压缩和提取css

//# 下载插件
-------------提取------------
yarn add mini-css-extract-plugin@2.6.1 -D

--------------压缩-------------
yarn add optimize-css-assets-webpack-plugin@6.0.1 -D

//# 引入插件
//提取css插件
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
//压缩css
const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')


//# 配置插件
plugins: [
    // 提取css
    new MiniCssExtractPlugin({
      filename: "css/[name]-[hash:5].css", // 重命名输出的css
    }),

    // 压缩css
    new OptimizeCssAssetsWebpackPlugin(), 
]

//# 配置loader
    {
      test: /\.css$/,
        use: [
          {
            loader: MiniCssExtractPlugin.loader,
            options: {
              publicPath: "../",
            },
          },
          "css-loader",
        ], //顺序不能换
    },
      {
        test: /\.less$/,
          use: [
            {
              loader: MiniCssExtractPlugin.loader,
              options: {
                publicPath: "../",
              },
            },
            "css-loader",
            "less-loader",
          ],
      },

11. 开发服务器devServer配置启动命令

11.1 配置服务器

#1.下载插件
yarn add webpack-dev-server@3.11.2 -D

#配置
// 开发服务器 -- 和五大特性同级
devServer: {
    contentBase: path.resolve(__dirname, 'dist'), //启动服务器目录
    publicPath: '/',// 静态资源查找路径
    compress: true,// 启动gzip
    port: 9527,// 端口
    open: true,// 是否在浏览器自动打开
    openPage: ['home.html']
}
target:'web',// 目标是浏览器
# 在package.json配置命令
  "scripts": {
    "serve": "npx webpack serve",
    "build": "npx webpack"
  }

# 启动命令
yarn serve/npm run serve   开发阶段启动
yarn build/npm run build   项目完成后才进行打包,中途不需要打包

12. 区分开发环境和生产环境[了解]

//#下载插件
yarn add cross-env@7.0.3 -D
//#修改package.json
"scripts": {
    "serve": "cross-env NODE_ENV=development webpack serve",
    "build": "cross-env NODE_ENV=production webpack"
  },
//#修改模式mode
mode: process.env.NODE_ENV,

13. 自动清除dist

//# 下载插件
yarn add clean-webpack-plugin@3.0.0 -D

//# 引入
const { CleanWebpackPlugin } = require('clean-webpack-plugin')

//# 调用插件
plugins = [
     // 删除dist目录
     new CleanWebpackPlugin()
]

14.多入口文件

//# 配置入口entry
entry: {

    dom: './src/js/dom.js',

    home: './src/js/home.js',
    login: './src/js/login.js',
    register: './src/js/register.js',
},
//# 配置出口output    
output: {
    path: path.resolve(__dirname, 'dist'), //出口路径
    filename: 'js/[name]-[hash:5].js',//输出文件名字
    publicPath: './'
},
    
//# 实例化html插件(一个页面实例一个插件)
new HtmlWebpackPlugin({
    template: './src/page/home.html',  // 把index.html复制到dist中 自动引入资源文件
    filename: 'home.html',
    chunks: ['home', 'dom']  //引入js资源
}),

15.自动读取入口文件

//#1.自动获取js文件,实现自动找到入口
let glob = require('glob');
let files = glob.sync('./src/pages/*?/*?.js');
let entry = {};
files.forEach(function (v) {
    let fn = v.match(/\/(\w+)\.js/i);
    entry[fn[1]] = v;
})

//#2.自动获取html文件,实现自动找网页模板
let htmls=glob.sync('./src/pages/*?/*?.html');
let htmlArr=htmls.map(function(v){
    let fn=v.match(/\/(\w+)\.html/i);
    return new HtmlWebpackPlugin({
        template: v,
        filename: fn[0].substr(1),
        chunks:[fn[1]],
    });
});

//#3.修改入口
//暴露webpack对象
module.exports = {
    //入口entry
    entry: entry,//修改这里
}

//#4.修改插件
//插件plugins
plugins: [

  // 提取css
  new MiniCssExtractPlugin({
    filename: "css/[name]-[hash:5].css", // 重命名输出的css
  }),

  // 压缩css
  new OptimizeCssAssetsWebpackPlugin(),

  // 删除dist目录
  new CleanWebpackPlugin()
].concat(htmlArr),  //修改这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值