每次使用webpack打包,都要手动创建静态的html 代码,然后引用打包后的JS文件,操作很繁琐
cnpm i --save-dev html-webpack-plugin
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
entry: 'index.js',
output: {
path: __dirname + '/dist',
filename: 'index_bundle.js'
},
plugins: [
new HtmlWebpackPlugin()
]
}
{
plugins: [
new CleanWebpackPlugin(), //删除上次打包文件,默认目录'./dist'
new HtmlWebpackPlugin({ // 打包输出HTML
title: '测试htmlWebpackPlugin',
minify: { // 压缩HTML文件
removeAttributeQuotes: true, // 移除属性的引号
removeComments: true, // 移除HTML中的注释
collapseWhitespace: true, // 删除空白符与换行符
minifyCSS: true// 压缩内联css
},
inject: true, // true 或body 默认值,script标签位于html文件的 body 底部; head script 标签位于 head 标签内
hash: true, // 引入 js 文件后面紧跟一个独特的 hash 值
// filename: 'huangbiao.html', // 文件名
filename:'huangbiao-[hash].html', // 带hash 值的文件名
template: './src/template/index.html' // 模板地址
})
],
}
hash选项的作用是 给生成的 js 文件一个独特的 hash 值,该 hash 值是该次 webpack 编译的 hash 值。默认值为 false 。
<script type="text/javascript" src="main.js?3f4e4073766b59c367d4">script>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title><%= htmlWebpackPlugin.options.title %>title>
head>
<body>
body>
html>
<%= htmlWebpackPlugin.options.title %> 显示标题,后面会强调,这种情况是在没有使用
templateParameters
属性的情况下可以使用
注入选项。有四个选项值 true, body, head, false.
名称 | 类型 | 默认 | 描述 |
---|---|---|---|
title | {string} | Webpack App | 用于生成HTML文档的标题 |
filename | {string} | index.html | 要将HTML写入的文件,默认为index.html,在这里可以指定一个目录(、asset/index.html) |
template | {string} | " | webpack模板的相对或绝对路径。默认情况下,src/index.ejs如果它存在,它将使用 |
inject | {Boolean | String} | true |
favicon | {String} | " | 将给定的favicon路径添加到输出HTML |
templateParameters | {Boolean | Object | Function |
meta | {Obeject} | {} | 允许注入meta-tags。例如meta:{viewport:’ width=device-width,initial-scale=1,shrik-to-fit=no '} |
base | { Object | String | false } |
minify | { Boolean | Object } | true如果mode是’ production ',否则false |
hash | { Boolean } | false | 如果为true,将唯一的Webpack编译哈希附加到所有包含的脚本和CSS文件,对于清除缓存很有用 |
cache | { Boolean } | true | 仅在文件被更改时才发出文件 |
showErrors | { Boolean } | true | 将错误详细信息写入HTML页面 |
chunks | { ? } | ? | 允许您仅添加一些块{ 例如,仅添加一些单元测试块 } |
chunksSortMode | { String | Function } | auto |
excludeChunks | { Array .} | " | 允许您跳过一些块(例如,不添加单元测试块) |
xhtml | { Boolean } | false | 如果true将link标记渲染为自动关闭(符合XHTML) |
<html>
<head>
<meta charset="UTF-8" />
<title><%= title %>title>
head>
<body>
<div id="root">div>
<div class="webpackStudy">
<div class="huangbiao">
<div><%= myName %>div>
<div class="huanghaili">
<div><%= sonName %>div>
div>
div>
<div class="">
<li class="dib">
<span class="icon iconfont">span>
<div class="name">icon-normalizationdiv>
<div class="code-name">div>
li>
<li class="dib">
<span class="icon iconfont">span>
<div class="name">icon-gongyingliandiv>
<div class="code-name">div>
li>
div>
div>
body>
html>
使用
<%=变量名%>
显示变量
{
plugins: [
new HtmlWebpackPlugin({
// 打包输出HTML
title: "测试htmlWebpackPlugin",
minify: {
// 压缩HTML文件
removeAttributeQuotes: true, // 移除属性的引号
removeComments: true, // 移除HTML中的注释
collapseWhitespace: true, // 删除空白符与换行符
minifyCSS: true // 压缩内联css
},
templateParameters: (compilation, assets, assetTags, options) => {
console.log(arguments)
return {
title: "测试htmlWebpackPlugin",
myName: 'huang-biao',
sonName:'huang-haili'
}
},
inject: true, // true 或body 默认值,script标签位于html文件的 body 底部; head script 标签位于 head 标签内
hash: true, // 引入 js 文件后面紧跟一个独特的 hash 值
filename: "index.html", // 文件名
// filename: 'huangbiao.html', // 文件名
// filename:'huangbiao-[hash].html', // 带hash 值的文件名
template: "./src/template/index.html" // 模板地址
}),
],
}
templateParameters 定义参数变量值
提示上述这个错误原因是因为 html 页面中使用了
<%= htmlWebpackPlugin.options.title %>
变量,删除该变量即可
<%=变量名%>
显示变量页面则不能使用<%= htmlWebpackPlugin.options.title %>
显示标题了,可以使用变量替换