在日常工作中遇到了需要打包成多页面的需求,由于每个页面的标题,描述以及一些seo和推广上的不一样,采用了 html-webpack-plugin
这个插件,在这里记录一下踩过的坑,以便后续查看和翻阅
简单的使用
安装插件
1
| yarn add html-webpack-plugin -D
|
使用
1 2 3 4 5 6 7 8 9 10 11 12
| const HtmlWebpackPlugin = require("html-webpack-plugin")
module.exports = { plugins: [ new HtmlWebpackPlugin({ template: "/public/index.html", filename: "template.html", chunks["template"] }) ] }
|
进阶操作
在日常开发过程中,我们可能会遇到一些与seo 相关或者需要在页面头部添加 meta 标签,我们就可以采用 html-webpack-plugin
来动态的向同一个模板插入不同的meta标签
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| const HtmlWebpackPlugin = require("html-webpack-plugin")
module.exports = { plugins: [ new HtmlWebpackPlugin({ template: "/public/index.html", filename: "template.html", chunks["template"], meta: { description: "description", keyword: "keyword" } }) ] }
|
以上代码会自动在打包之后的页面中添加 meta 标签
1 2 3 4 5 6
| <html> <head> <meta name="description" content="description" /> <meta name="keyword" content="keyword" /> </head> </html>
|
自定义 link 标签
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 27
| const HtmlWebpackPlugin = require("html-webpack-plugin")
module.exports = { plugins: [ new HtmlWebpackPlugin({ template: "/public/index.html", filename: "template.html", chunks["template"], meta: { description: "description", keyword: "keyword" }, links: [ { href: "http://template.com/assets/abc.css", type: "text/css" }, { href: "http://template.com/assets/abc.css", ref: "alternate", hrefLang: "en", } ] }) ] }
|
然后在模板页面可以解析 links 的内容在打包时动态生成我们所需要的的 link 标签
1 2 3 4 5 6 7
| <html> <head> <% for (var key1 in htmlWebpackPlugin.options.links) { %> <link <% for (key in htmlWebpackPlugin.options.links[key1]) { %> <%= key %>="<%= htmlWebpackPlugin.options.links[key1][key] %>"<% } %> /> <% } %> </head> </html>
|
在上述代码中,打包时首先会去拿取 htmlWebpackPlugin.options.links
中的内容进行遍历,然后根据 links
中元素的属性来动态生成link标签的 href
,type
,ref
等属性
未完待续