Skip to content

webpack 常用插件

HtmlWebpackPlugin

该插件将为你生成一个 HTML5 文件, 在 body 中使用 script 标签引入你所有 webpack 生成的 bundle

sh
npm install --save-dev html-webpack-plugin

webpack.config.js

javascript
const HtmlWebpackPlugin = require("html-webpack-plugin");
const path = require("path");

module.exports = {
  entry: "index.js",
  output: {
    path: path.resolve(__dirname, "./dist"),
    filename: "bundle.js",
  },
  plugins: [new HtmlWebpackPlugin()],
};

HotModuleReplacementPlugin

启用热模块更换,也称为 HMR。

HMR

永远不要在生产环境( production )下启用 HMR

webpack.config.js

javascript
const path = require("path");

module.exports = {
  entry: "index.js",
  output: {
    path: path.resolve(__dirname, "./dist"),
    filename: "bundle.js",
  },
  plugins: [new webpack.HotModuleReplacementPlugin()],
};

DefinePlugin

DefinePlugin 允许在 编译时 将你代码中的变量替换为其他值或表达式

webpack.config.js

javascript
const path = require("path");
const dotenvExpand = require("dotenv-expand");

module.exports = {
  entry: "index.js",
  output: {
    path: path.resolve(__dirname, "./dist"),
    filename: "bundle.js",
  },
  plugins: [
    new webpack.DefinePlugin({
      "process.env": JSON.stringify(dotenvExpand.expand(env).parsed),
    }),
  ],
};

CleanWebpackPlugin

删除/清理构建文件夹

sh
npm install --save-dev clean-webpack-plugin

webpack.config.js

javascript
const path = require("path");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");

module.exports = {
  entry: "index.js",
  output: {
    path: path.resolve(__dirname, "./dist"),
    filename: "bundle.js",
  },
  plugins: [new CleanWebpackPlugin()],
};

MiniCssExtractPlugin

将 CSS 提取到单独的文件中

sh
npm install --save-dev mini-css-extract-plugin

webpack.config.js

javascript
const path = require("path");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {
  entry: "index.js",
  output: {
    path: path.resolve(__dirname, "./dist"),
    filename: "bundle.js",
  },
  plugins: [
    new MiniCssExtractPlugin({
      filename: "css/[name].css",
      chunkFilename: "css/[name].[contenthash:5].css",
    }),
  ],
  module: {
    rules: [
      {
        test: /\.css/,
        use: [{ loader: MiniCssExtractPlugin.loader }, "css-loader"],
        exclude: /node_modules/,
      },
      {
        test: /\.less/,
        use: [
          {
            loader: MiniCssExtractPlugin.loader,
          },
          "css-loader",
          "less-loader",
        ],
        exclude: /node_modules/,
      },
    ],
  },
};

TerserPlugin

用来优化 js 体积,包括重命名变量,甚至是删除整个的访问不到的代码块。

sh
npm install --save-dev terser-webpack-plugin

webpack.config.js

javascript
const path = require("path");
const TerserPlugin = require("terser-webpack-plugin");

module.exports = {
  entry: "index.js",
  output: {
    path: path.resolve(__dirname, "./dist"),
    filename: "bundle.js",
  },
  optimization: {
    minimize: true,
    minimizer: [
      new TerserPlugin({
        test: /\.js(\?.*)?$/i, //匹配参与压缩的文件
        parallel: true, //使用多进程并发运行
        terserOptions: {
          //Terser 压缩配置
          output: { comments: false },
        },
        extractComments: true, //将注释剥离到单独的文件中
        terserOptions: {
          compress: { pure_funcs: ["console.log"] },
        },
      }),
    ].filter(Boolean),
  },
};

CssMinimizerPlugin

压缩 css

sh
npm install --save-dev css-minimizer-webpack-plugin

webpack.config.js

javascript
const path = require("path");
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");

module.exports = {
  entry: "index.js",
  output: {
    path: path.resolve(__dirname, "./dist"),
    filename: "bundle.js",
  },
  optimization: {
    minimize: true,
    minimizer: [
      new CssMinimizerPlugin({
        parallel: true,
      }),
    ].filter(Boolean),
  },
};