0%

npm | 插件 html-webpack-plugin

如果输出的文件带有 hash 值,我们不能每次都手动引入文件,所以,我们想要把打包好的文件自动引入 html 中。

不同的 webpack 版本需要安装不同的版本。

html-webpack-plugin 使用时,一个实例操作只能一个html,所以对于多页面项目,我们需要创造多个实例。

安装

Webpack 5

npm i --save-dev html-webpack-plugin

Webpack 4

npm i --save-dev html-webpack-plugin@4

该模型和 webpack 的版本强对应。

  • webpack 4
  • webpack-cli 3
  • html-webpack-plugin 4
  • html-loader 1

下面贴一下我其中一个项目的依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
"dependencies": {
"@babel/plugin-transform-runtime": "^7.14.3",
"@babel/preset-env": "^7.14.2",
"abi-decoder": "^2.4.0",
"babel-loader": "^8.2.2",
"clean-webpack-plugin": "^4.0.0-alpha.0",
"ethereumjs-tx": "^1.3.7",
"html-loader": "^1.3.2",
"html-webpack-plugin": "^4.5.2",
"jquery": "^3.6.0",
"web3": "^1.3.6",
"webpack": "^4.46.0",
"webpack-cli": "^3.3.12",
"webpack-dev-server": "^3.11.2"
},
"devDependencies": {
"@babel/core": "^7.14.3",
"babel-cli": "^6.26.0",
"babel-preset-env": "^1.7.0"
}

使用

无模版

1
2
3
4
5
6
7
8
9
10
11
12
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
entry: 'index.js',
output: {
path: __dirname + '/dist',
filename: 'index_bundle.js'
},
plugins: [
new HtmlWebpackPlugin()
]
}

上面的会在 dist 中,创建一个 index.html 然后自动引入 index_bundle.js ,如果你生成了 .css 也会自动引入。

有模版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
entry: 'index.js',
output: {
path: __dirname + '/dist',
filename: 'index_bundle.js'
},
plugins: [
new HtmlWebpackPlugin(), // Generates default index.html
new HtmlWebpackPlugin({ // Also generate a test.html
filename: 'test.html',
template: 'src/assets/test.html'
})
]
}
  • dist/test.html 是由 src/assets/test.html 里的模版生成的。
  • dist/index.html 是自生成 index.html

多页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const HtmlWebpackPlugin = require('html-webpack-plugin')

const htmlPluginArray= [];

function getEntry() {
const entry = {};
glob.sync('./src/pages/*/*/index.js')
.forEach(function (filePath) {
var name = filePath.match(/\/pages\/(.+)\/index.js/);
name = name[1];
entry[name] = filePath;

// 实例化插件
htmlPluginArray.push(new HtmlWebpackPlugin({
filename: './' + name + '/index.html',
template: './src/pages/' + name + '/index.html',
}))

});
return entry;
};

// 配置plugin,此处省略其他配置代码
plugins: [
htmlPluginArray
],
请我喝杯咖啡吧~