HTML Webpack Plugin详细介绍及使用
myzbx 2024-12-02 22:41 10 浏览
概念
HTML Webpack Plugin这是一个webpack插件,它简化了HTML文件的创建,以服务于你的webpack bundle。这对于在文件名中包含哈希的webpack包特别有用,因为文件名会改变每次编译。您可以让插件为您生成一个HTML文件,或者使用lodash模板提供您自己的模板,或者使用您自己的加载器。
安装
针对webpack的版本,需要安装对应不同的版本。
webpack4
npm i --save-dev html-webpack-plugin@4
webpack5
npm i --save-dev html-webpack-plugin
使用
这个插件会为你生成一个HTML5文件,其中包含了使用script标签的所有webpack的bundle。
只需将插件添加到webpack配置中,如下所示:
const path = require("path")
const HtmlWebpackPlugin = require("html-webpack-plugin")
module.exports = {
entry: "./src/index.js",
output: {
filename:"index_bundle.js",
path: path.resolve(__dirname,"dist")
},
plugins: [
new HtmlWebpackPlugin()
]
}
这将生成一个包含以下内容的文件dist/index.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Webpack App</title>
</head>
<body>
<script src="index_bundle.js"></script>
</body>
</html>
如果您有多个webpack入口点,它们都将与script标签一起包含在生成的HTML中。
如果你在webpack的输出中有任何CSS资产(例如,用mini-css-extract-plugin提取的CSS),那么这些将包含在HTML头部的标签中。
如果你有使用它的插件,html-webpack-plugin应该在任何集成插件之前。
选项
你可以传递一个配置选项到html-webpack-plugin。允许的值如下:
- title
类型:String
默认值:Webpack App
描述:要用于生成的HTML文档的标题。
- filename
类型:String或Function
默认值:index.html
描述:要写入HTML的文件的文件名。默认为index.html。您也可以在这里指定一个子目录(例如:assets/admin.html)。占位符[name]将被条目名称替换。也可以是一个函数,例如(entryName) => entryName + '.html'。
- template
类型:String
默认值:空
描述:默认情况下,它将使用src/index.ejs(如果存在的话)。
- templateContent
类型:string|Function|false
默认值:false
描述:可以用来代替模板提供一个内联模板。
- templateParameters
类型:Boolean|Object|Function
默认值:false
描述:允许覆盖模板中使用的参数。
- inject
类型:Boolean|String
默认值:true
描述:true || 'head' || 'body' || false将所有资产注入到给定的模板或templateContent中。当传递'body'时,所有javascript资源将被放置在body元素的底部。'head'将把脚本放置在head元素中。设置为true时,将根据scriptLoading选项,决定是把脚本添加到head还是body中。使用false禁用自动注入。
- publicPath
类型:String|'auto'
默认值:auto
描述:publicPath属性值用于script和link 标签。
- scriptLoading
类型:blocking|defer
默认值:defer
描述:现代浏览器支持非阻塞javascript加载(“defer”),以提高页面启动性能。
- favicon
类型:String
默认值:空
描述:将给定的图标路径添加到输出的HTML中。
- meta
类型:Object
默认值:{}
描述:允许注入meta标签。例如:meta: {viewport: 'width=device-width, initial-scale=1, shrink-to-fit=no'}。
- base
类型:Object|String|false
默认值:false
描述:注入一个base标签。如base:“https://example.com/path/page.html
- minify
类型:Boolean|Object
默认值:如果mode为'production'则为true,否则为false
描述:控制是否以及以何种方式压缩输出。
- hash
类型:Boolean
默认值:false
描述:如果为true,则附加一个唯一的webpack编译哈希到所有包含的脚本和CSS文件。这对于缓存销毁是很有用的
- cache
类型:Boolean
默认值:true
描述:只有当文件被更改时,才会删除它。
- showErrors
类型:Boolean
默认值:true
描述:错误的详细信息将写入HTML页面。
- chunks
类型:?
默认值:?
描述:只允许添加一些chunk(例如:只添加unit-test 的chunk)
- chunksSortMode
类型:String|Function
默认值:auto
描述:允许控制块在包含到HTML之前应该如何排序。允许的值是'none' | 'auto' | 'manual' | {Function}。
- excludeChunks
类型:Array.<string>
默认值:空
描述:允许你跳过一些chunk(例如不添加unit-test 的chunk)。
- xhtml
类型:Boolean
默认值:false
描述:如果为true,则将link标签呈现为自动关闭(XHTML兼容)
下面是一个webpack配置示例,演示了如何使用这些选项:
{
entry: 'index.js',
output: {
path: __dirname + '/dist',
filename: 'index_bundle.js'
},
plugins: [
new HtmlWebpackPlugin({
title: 'My App',
filename: 'assets/admin.html'
})
]
}
生成多个HTML文件
要生成多个HTML文件,请在插件数组中多次声明插件。
配置示例:
{
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'
})
]
}
编写模板
如果默认生成的HTML不能满足您的需要,您可以提供自己的模板。最简单的方法是使用template选项并传递一个定制的HTML文件。html-webpack-plugin会自动将所有必需的CSS, JS, manifest和favicon文件注入到标记中。
配置文件的部分内容:
plugins: [
new HtmlWebpackPlugin({
title: 'Custom template',
// Load a custom template (lodash by default)
template: 'index.html'
})
]
模板文件index.html的内容:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
</body>
</html>
如果您已经有一个模板加载器,您可以使用它来解析模板。请注意,如果您指定了html加载器并使用.html文件作为模板,也会发生这种情况。
module: {
loaders: [
{ test: /\.hbs$/, loader: "handlebars-loader" }
]
},
plugins: [
new HtmlWebpackPlugin({
title: 'Custom template using Handlebars',
template: 'index.hbs'
})
]
您可以使用现成的lodash语法。如果inject特性不适合你的需要,而你又想完全控制资产的位置,可以使用html-webpack-template项目的默认模板作为你自己编写模板的起点。
相关推荐
- SUS631化学成分特性及适用范围(sus316的材料成分)
-
sus631特性及适用范围:添加铝的沉淀硬化型钢种,用作弹簧、热圈及计器部件。sus631/17-7PH/S17700/0Cr17Ni7Al沉淀硬化型不锈钢日本SUS631(17-7PH国标0Cr17...
- 4年仅掉价不到3成!这辆45万的奥迪S5纯素车,值不值得买?
-
哈喽~大家好,检车家老司机又和你们见面啦!我是你们的老朋友建国,我曾是一枚修过7年车的汽车修理工,现在是一名专业的二手车检测技师,更是一枚事故车劝退师。欢迎收看本期二手车检测趣事,今天给大家带来的车型...
- 新旗舰什么样?7张图全方位预测三星Note4
-
夏天已经快结束了,这也就意味着今年上半年的重磅机型已经悉数发布完毕,我们先要做的就是过一段平淡的日子然后期待着下半年的重磅产品陆续登场。三星GALAXYNote4无疑是下半年最值得我们期待的机型之一,...
- 拍照为主兼顾视频,将来可能接单,索尼a7m3和松下s5怎么选?
-
最近有小伙伴问了我下面这么一个问题。想买一台全画幅微单,但是预算有限,看好了两款机型,他的问题是:拍照为主兼顾视频,将来可能接单,索尼a7m3和松下s5怎么选?这个问题,我就想到这个网友也是做过一些功...
- GolangWeb框架Iris项目实战-JWT和中间件(Middleware)的使用EP07
-
前文再续,上一回我们完成了用户的登录逻辑,将之前用户管理模块中添加的用户账号进行账号和密码的校验,过程中使用图形验证码强制进行人机交互,防止账号的密码被暴力破解。本回我们需要为登录成功的用户生成Tok...
- 对焦大提升!松下S5M2 3.0固件&S5M2X 2.0固件详细测试
-
前段时间,松下发布了最新的S5M2和S5M2X的固件,并且这是一个比较大的更新,对对焦性能、防抖性能有较大提升,还新增了录制代理文件以及预连拍功能。这都是超级实用的功能,松下不愧是固件大厂!自动对焦升...
- 三星Galaxy S5安卓5.0测试版曝光,总算好看点了
-
三星GalaxyS5安卓5.0测试版曝光,总算好看点了出处:IT之家原创(远洋)2014-10-3123:11:04评论IT之家报道,显然,三星正在将自家的TouchWiz用户界面适配谷歌最...
- 松下S5M2对焦变换功能讲解#松下相机
-
大家好,今天和大家分享松下相机一个非常好用的功能:对焦变换。这个功能通常用于近景的视频拍摄,比如像现在画面里出现的人偶、象棋,看到视频的对焦点非常平顺的依次从画面的上方移动到中间,再移动到靠下的位置。...
- 松下 S5M2的几个重要功能(拍照篇) 松下 S5M2的几个重要功能
-
赶在618结束之前,我来讲几个松下S5二代的重要功能,也许其中的某一项功能会成为你购买它的理由。·首先来讲一讲高分辨率模式,这是一个非常好用的功能。使用松下S52代的左边波轮,可以直接进入这个模式。进...
- 奥的斯电梯OTIS DCSS5-E门机自学习详细过程
-
奥的斯电梯DCSS5-E门机自学习详细过程1.将轿顶打检修2.插入TT时按“M”键,提示你按“3”键,按“3”3.关键一步,因为怕你误操作而更改门机运行曲线和重要参数,正常情况下你是看不到第三个菜单的...
- 玩转smardaten | 逻辑编排很难吗?看无代码平台操作
-
1、前言不知道各位小伙伴有没有使用过无代码软件平台的经历呢?有没有想过你可以通过简单的拖拽就能构建和部署强大的应用程序?简单地说,smardaten无代码系统使任何人都能够开发软件,无需高深的开发知...
- 关于编码的那些事 - URL 编码(url编码的作用)
-
作者:redmed背景Web项目中经常会遇到处理URL中Query的情况,来看下下面问题你有疑惑吗?项目中发现会用到qs、query-string、URLSearchParams、甚至q...
- 国服一周数据观察:新英雄千珏胜率不足50%
-
随着千珏的更新,5.20版本到现在已经有一周的时间了,这段时间我们的排位赛数据有什么变化呢?快来看下排位赛数据分析。选择率最高的英雄榜单与过去的变化不大,仍然是盲僧、薇恩和赵信荣登榜首。但这不代表这些...
- iPhone系列领跑消费者最喜爱拍摄设备名单
-
现在连GalaxyS5都被iPhone4s,iPhone4这类老机型压在后面,由此可见苹果的产品比起三星真是畅销太多了。国外著名图片分享网站Flickr,今天公布了2015年用户们最喜欢使...
- Galaxy S6图像处理性能不如iPhone6 Plus?
-
三星最近公布了旗舰机GalaxyS6,有许多人批评、褒奖,但更常拿来跟iPhone6比较(明明不同系统阿?),而这次又有报告指GalaxyS6的「图像处理」不如iPhone6Plus,究竟是...
- 一周热门
- 最近发表
-
- SUS631化学成分特性及适用范围(sus316的材料成分)
- 4年仅掉价不到3成!这辆45万的奥迪S5纯素车,值不值得买?
- 新旗舰什么样?7张图全方位预测三星Note4
- 拍照为主兼顾视频,将来可能接单,索尼a7m3和松下s5怎么选?
- GolangWeb框架Iris项目实战-JWT和中间件(Middleware)的使用EP07
- 对焦大提升!松下S5M2 3.0固件&S5M2X 2.0固件详细测试
- 三星Galaxy S5安卓5.0测试版曝光,总算好看点了
- 松下S5M2对焦变换功能讲解#松下相机
- 松下 S5M2的几个重要功能(拍照篇) 松下 S5M2的几个重要功能
- 奥的斯电梯OTIS DCSS5-E门机自学习详细过程
- 标签列表
-
- HTML 基础教程 (29)
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 选择器 (30)
- CSS 轮廓 (30)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 中级教程 (30)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)