第 3 章 webpack 生产环境基本配置

114 阅读1分钟

3.1 提取css为单独的样式文件

3.1.1 mini-css-extract-plugin

mini-css-extract-plugin 是一个用于将 CSS 提取为单独文件的插件,它可以帮助优化网页加载速度和样式文件的缓存策略。

以下是使用 mini-css-extract-plugin 的一般步骤: 首先,安装 mini-css-extract-plugin,我这里指定了此时调试的版本

npm install mini-css-extract-plugin@0.9.0 --D

2 在 webpack 的配置文件中引入 mini-css-extract-plugin

const MiniCssExtractPlugin = require('mini-css-extract-plugin');

3 在 plugins 配置中实例化 MiniCssExtractPlugin

plugins: [ 
    new MiniCssExtractPlugin({ 
        filename: 'css/[name].[contenthash].css',  // 提取后的 CSS文件名和路径 
    }), 
],

4 在 module.rules 配置中配置 CSS 文件的处理规则,使用 MiniCssExtractPlugin.loader 替代原来的 style-loader

module: { 
    rules: [ 
        { 
            test: /\.css$/, 
            use: [ MiniCssExtractPlugin.loader,  'css-loader', ]
        },
    ], 
},

注意,mini-css-extract-plugin 通常在生产环境中使用,因为在开发环境中使用提取 CSS 的插件可能会增加编译时间。在开发环境中,可以继续使用 style-loader 将 CSS 注入到页面中。

3.2 css 兼容性处理

3.2.1 postcss

首先我们要安装postcss 、 postcss-loader 、postcss-preset-env

npm install postcss@8.4.21 postcss-loader@3.0.0 postcss-preset-env@6.7.0 --D

2 在webpack配置文件中配置postcss-loader

{
    loader: 'postcss-loader',
    options: {
      ident: 'postcss',
      plugins: () => [
        require('postcss-preset-env')()
      ]
    }
}

postcss-preset-env 的作用是帮postcss找到package.json中browserslist里面的配置,通过配置加载指定的css兼容性样式

3 在package.json 中配置browserslist

"browserslist": {
  "development": [
    "last 1 chrome version",
    "last 1 firefox version",
    "last 1 safari version"
  ],
  // 生产环境:默认是看生产环境
  "production": [
    ">0.2%",
    "not dead",
    "not op_mini all"
  ]
}

browserslist里默认执行的是development里的配置,这里跟mode中的环境配置无关,而是node中的环境,我们通过设置node环境变量来执行指定的browserslist的配置

// 在webpack配置文件中设置node的环境变量
process.env.NODE_ENV = development

3.3 压缩css

3.3.1 optimize-css-assets-webpack-plugin

optimize-css-assets-webpack-plugin 是一个用于优化和压缩 CSS 资源的 Webpack 插件。它可以帮助减小 CSS 文件的体积,提高页面加载速度。

首先,需要安装 optimize-css-assets-webpack-plugin 插件。运行以下命令来安装它:

npm install optimize-css-assets-webpack-plugin@6.0.1 --D

2 在 Webpack 配置文件中引入 optimize-css-assets-webpack-plugin 插件:

const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');

3 在plugins中使用

new OptimizeCssAssetsWebpackPlugin()

3.4 js语法检查

3.4.1 ESlint

ESLint 是一个用于检查 JavaScript 代码质量和风格的静态代码分析工具。它可以帮助开发团队遵循一致的编码规范,并发现常见的代码错误和潜在的问题。它有很多相对应的代码风格的库,我们这里以airbnb-base风格为例。

首先安装相关依赖

npm install eslint@6.8.0 eslint-loader@3.0.3 eslint-plugin-import@2.20.1 eslint-config-airbnb-base@14.0.0 --D

2 在webpack配置文件中配置loader

{    
    test: /\.js$/,
    exclude: /node_modules/,
    loader: 'eslint-loader',
    options: {
      fix: true
    }
}

3 在package.json中配置eslintConfig

"eslintConfig": {
    "extends": "airbnb-base",
    "env": {
      "browser": true
    }
  },

3.5 js兼容性处理

3.5.1 基本兼容性处理

首先安装相关依赖

npm install babel@6.23.0 babel-loader@8.3.0 @babel/preset-env@7.20.2 @babel/core@7.21.0  --D

2 在webpack配置文件中配置loader

{
    test: /\.js$/,
    exclude: /node_modules/,
    loader: 'babel-loader',
    options: {
      // 预设:指示babel做怎么样的兼容性处理
      presets: [
          '@babel/preset-env'
      ]
    }
}

基本处理不能处理promise等高级语法。

3.5.2 全部兼容性处理

首先 安装 @bable/polyfill的依赖包

npm install @bable/polyfill@7.8.2 --D

2 在入口文件中引入这个包

import '@babel/polyfill';

3.5.3 按需加载兼容性处理

我们使用core.js 这个库来做按需处理js兼容性问题。Core.js 是由 Babel 团队开发的。Babel 是一个用于将现代 JavaScript 代码转换为向后兼容版本的工具,而 Core.js 是 Babel 团队为实现 ECMAScript 新特性的兼容性而开发的一个库。

首先,安装corejs的依赖包

npm install core-js@3.29.0 --D

在webpack中配置loader

{
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader',
        options: {
          // 预设:指示babel做怎么样的兼容性处理
          presets: [
            [
              '@babel/preset-env',
              {
                // 按需加载
                useBuiltIns: 'usage',
                // 指定core-js版本
                corejs: {
                  version: 3
                },
                // 指定兼容性做到哪个版本浏览器
                targets: {
                  chrome: '60',
                  firefox: '60',
                  ie: '9',
                  safari: '10',
                  edge: '17'
                }
              }
            ]
          ]
        }
      }

3.6 html和js的压缩

当我们开启mode 为 production时,会自动压缩html和js。也就是说,生产环境会自动压缩html和js文件。