1. 概念

webpack 中的插件(plugin)在打包过程中运行到某个时刻的时候,会帮助你做一些事情。

2. HtmlWebpackPlugin

在之前的 demo 中,打包后的 dist 目录中的 index.html 是我们手动添加进去的,里面使用 <script> 引入 main.js 文件也是手写的,这是非常不方便的,此时就可以使用 HtmlWebpackPlugin 帮助我们解决这个问题了。

这个插件的作用就是生成一个 HTML 文件,该 HTML 文件里自动地就包含了 <script> 标签加载入口文件。

2.1 使用方式

npm install --save-dev html-webpack-plugin
// webpack.config.js
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  entry: 'src/index.js',
  // ...
  plugins: [
    new HtmlWebpackPlugin()
  ]
}

执行命令打包,可以看到 dist 目录下就生成了一个 index.html 文件,里面的内容是这样的:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Webpack App</title>
  </head>
  <body>
  <script type="text/javascript" src="main.js"></script></body>
</html>

但是问题又来了,生成的 index.html 缺少了一些内容,比如 <div id="root">root</div>,这里可以使用该插件的一些配置来实现。

2.2 配置

// webpack.config.js

plugins: [
  new HtmlWebpackPlugin({
    template: 'src/index.html'
  })
]

上面使用了 template 选项,那么最终打包生成的 dist/index.html 就是以 src/index.html 为模板来生成的。

更多的配置选项查阅 html-webpack-plugin#options

3. CleanWebpackPlugin

这个插件的作用是删除 webpack 输出目录,比如打包生成的是 dist 目录,那么这个插件就会把 dist 目录删除掉。

3.1 使用

npm install --save-dev clean-webpack-plugin
// webpack.config.js
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { CleanWebpackPlugin } = require('clean-webpack-plugin')

module.exports = {
  entry: 'src/index.js',
  // ...
  plugins: [
    new CleanWebpackPlugin({
      verbose: true
    }),
    new HtmlWebpackPlugin()
  ]
}

使用 CleanWebpackPlugin 时设置了 verbose 选项为 true,它的作用是在控制台中输出日志。

执行打包命令(假设之前已经打包生成了 dist 目录),可以看到控制台输出了以下内容:

clean-webpack-plugin: removed dist\bundle.js
clean-webpack-plugin: removed dist\index.html
Hash: 99aed0b5824ba9a08cca
Version: webpack 4.40.2
Time: 407ms
Built at: 2019-10-28 21:18:02
     Asset       Size  Chunks             Chunk Names
 bundle.js   3.83 KiB    main  [emitted]  main
index.html  222 bytes          [emitted]
Entrypoint main = bundle.js
[./src/index.js] 59 bytes {main} [built]
Child html-webpack-plugin for "index.html":
     1 asset
    Entrypoint undefined = index.html
    [./node_modules/html-webpack-plugin/lib/loader.js!./src/index.html] 378 bytes {0} [built]
    [./node_modules/webpack/buildin/global.js] (webpack)/buildin/global.js 472 bytes {0} [built]
    [./node_modules/webpack/buildin/module.js] (webpack)/buildin/module.js 497 bytes {0} [built]
        + 1 hidden module

可以看到,webpack 先执行了 clean-webpack-plugin 插件,将 dist/bundle.js 和 dist/index.html 删除,然后进行打包,最后执行 html-webpack-plugin 插件生成 index.html 文件(也就是不同的插件是会在 webpack 打包过程中的不同时刻执行的)。

更多内容查阅 clean-webpack-plugin


3santiago3
113 声望2 粉丝

引用和评论

0 条评论