webpack插件解析:HtmlWebpackPlugin是干什么的以及如何使用它
HtmlWebpackPlugin是一个出现频率比较高的webpack插件,本文对其作用和配置作一番比较详细的分析(本文的配置均在webpack.config.js中进行)。
为何使用它
简单来说,HtmlWebpackPlugin是用于生成html文件。我们的疑问可能在于,webpack本身不能生成html文件吗?事实上,默认的webpack主要是用于处理js文件的依赖图构建和打包,当需要生成html文件时,便需要使HtmlWebpackPlugin插件。
如何安装
作为开发依赖安装即可:
npm install --save-dev html-webpack-plugin
如何在webpack.config.js中配置该插件
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
...
plugins: [new HtmlWebpackPlugin()]
};
以上配置中,首先使用了require引入插件,首字母开头表明是一个构造函数,而后使用new语句创建一个实例,并将其作为webpackConfig的plugins选项的一个数组成员,这样表示webpack打包时将使用HtmlWebpackPlugin插件。
这里没有做HtmlWebpackPlugin的任何额外配置,实际上它的默认配置将会生效。
默认配置是如何工作的
在以上配置中,HtmlWebpackPlugin就已经会生效,只不过是应用的默认配置。默认配置如下:
- 默认配置会在
出口目录中(通过output.path选项配置)生成一个index.html文件; - 生成的index.html文件将会以script标签的形式引入每一个输出js文件(
通过output.filename选项配置)。
现在我们把其他基本配置补充完整:
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
mode:'development',
entry:{
app:path.resolve(__dirname,'./index.js'),
test:path.resolve(__dirname,'./test.js')
},
output:{
path: path.resolve(__dirname,'./dist'),
filename:'[name]_bundle.js'
},
plugins:[new HtmlWebpackPlugin()]
}
以上配置中,先抛开HtmlWebpackPlugin来分析打包结果:由于项目中存在两个入口,出口(输出文件)使用了占位符,因此结果是在dist目录下生成两个js文件即app_bundle.js和test_bundle.js两个文件。
根据上面所述的默认配置,那么除此之外,还会在dist目录下生成一个index.html文件,它以script标签的形式引入app_bundle.js和test_bundle.js,即:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Webpack App</title>
</head>
<body>
<script type="text/javascript" src="app_bundle.js"></script>
<script type="text/javascript" src="test_bundle.js"></script>
</body>
</html>
修改默认配置
假如想要修改默认配置,只需要在在实例化HtmlWebpackPlugin的对象时,传入一个配置对象即可,如:
const htmlPlugin = new HtmlWebpackPlugin({
template:path.join(__dirname,'./public/index.html'),
filename: 'index.html'
});
module.exports = {
...
plugins: [new HtmlWebpackPlugin()]
};
常见应用:在内存中生成index.html文件
以上案例中,我们实现了生成物理的index.html文件,即在项目的dist目录下,是可以看见index.html的。有另外一种常见情况,即我们需要在内存中生成index.html文件,这时内存中的index.html中是在资源管理器中看不到的。我们何时会有这样的奇怪需求呢?
试想这样的应用场景:
我们的项目中需要实时预览效果,需要启动一个本地服务器,例如需要通过
http://localhost:8080这样的方式访问index.html文件。显然我们对项目做的每一个更改,webpack都会重新打包,并反映到index.html文件中去。
这听起来是完全可行的,问题在于:
- webpack打包时读写
磁盘去生成目标文件,由于物理磁盘读写速度非常有限,很可能导致预览滞后。
因此我们可以生成一个内存中的index.html文件用于浏览器实时预览,由于内存读写速度明显快于物理磁盘,因此实时预览也更加及时。
如何实现呢?
- 我们只需要安装webpack-dev-server,并启动一个服务即可。这时HtmlWebpackPlugin将
在内存中生成html文件,而不是在出口目录中。 - 使用 webpack-dev-server后,
出口目录中的js文件同时会在内存中生成,并被内存中的index.html文件引入。
限于篇幅,这里不再赘述webpack-dev-server的作用机制及配置方法。
webpack插件解析:HtmlWebpackPlugin是干什么的以及如何使用它的更多相关文章
- webpack插件之htmlWebpackPlugin
webpack插件之htmlWebpackPlugin webpack插件 自动化 htmlWebpackPlugin 由于webpack已经帮我们处理好js之间的依赖关系,现在我们可以忽略js的加 ...
- webpack插件之html-webpack-plugin
官方文档:https://www.npmjs.com/package/html-webpack-plugin html-webpack-plugin 插件专门为由webpack打包后的js提供一个载体 ...
- webpack 插件: html-webpack-plugin
插件地址:https://www.npmjs.com/package/html-webpack-plugin 这个插件用来简化创建服务于 webpack bundle 的 HTML 文件,尤其是对于在 ...
- 【webpack插件使用】在开发中快速掌握并使用Webpack构建web应用程序
1.webpack-dev-server插件的基本使用 入门程序 const path = require('path'); // 导出一个Webpack的配置对象(通过node中的模块操作,向外暴露 ...
- 从0开始编写webpack插件
1. 前言 插件(plugins)是webpack中的一等功臣.正是由于有了诸多插件的存在,才使得webpack无所不能.在webpack源码中也是使用了大量的内部插件,插件要是用的好,可以让你的工作 ...
- 【Web】阿里icon图标webpack插件(webpack-qc-iconfont-plugin)详解
webpack-qc-iconfont-plugin webpack-qc-iconfont-plugin是一个webpack插件,可以轻松地帮你将阿里icon的图标项目下载至本地 开发初衷 之前已经 ...
- webpack 插件拾趣 (1) —— webpack-dev-server
结束了一季的忙碌,我这封笔已久的博客也终究该从春困的咒印中复苏,想来写些实用易读的作为开篇,自然是最好不过. 新开个 webpack 插件/工具介绍的文章系列,约莫每周更新一篇篇幅适中的文章聊以共勉, ...
- webpack模块解析
前面的话 在web存在多种支持JavaScript模块化的工具(如requirejs和r.js),这些工具各有优势和限制.webpack基于从这些系统获得的经验教训,并将模块的概念应用于项目中的任何文 ...
- 探寻 webpack 插件机制
webpack 可谓是让人欣喜又让人忧,功能强大但需要一定的学习成本.在探寻 webpack 插件机制前,首先需要了解一件有意思的事情,webpack 插件机制是整个 webpack 工具的骨架,而 ...
随机推荐
- vue 刮刮乐功能实现
<template> <!--游玩区域--> <div class="panel"> <canvas id="canvas&qu ...
- vim grep sed awk对大小写不敏感
vim grep sed awk对大小写不敏感 环境 [root@osker ~]# cat /etc/redhat-release CentOS Linux release (Core) [root ...
- Java 判断日期的方法
//str:传入的日期 eg:"2018-07-23" function IsDate(str) { arr = str.split("-"); if(arr. ...
- pip 安装 request 失败
C:\Program Files\Python35\Scripts>pip install requests Collecting requests Using cached requests- ...
- SSAS 第一篇:多维数据分析基础
多维数据分析是指按照多个维度(即多个角度)对数据进行观察和分析,多维的分析操作是指通过对多维形式组织起来的数据进行切片 .切块.聚合.钻取 .旋转等分析操作,以求剖析数据,使用户能够从多种维度.多个侧 ...
- 详细解析 HBASE 配置的各种要点
文章更新于:2020-04-06 安装惯例,需要的文件附上链接放在文首. 文件名:hbase-2.2.4-bin.tar.gz 文件大小:213.24 MB 下载链接:http://download. ...
- ThinkPHP3.1.2 使用cli命令行模式运行
ThinkPHP3.1.2 使用cli命令行模式运行 标签(空格分隔): php 前言 thinkphp3.1.2 需要使用cli方法运行脚本 折腾了一天才搞定 3.1.2的版本真的很古老 解决 增加 ...
- YII基础
一.目录结构 应用中最重要的目录和文件(假设应用根目录是 basic): basic/ 应用根目录 composer.json Composer 配置文件, 描述包信息 config/ 包含应用配置及 ...
- mappedBy和JoinColumn,onetomany。
无论是onetomany,还是manytoone.都要设置级联关系(cascade),否则不会储存关联的数据. @Entity public class Clazzss { @Id @Generate ...
- Java正则表达式基础知识及实例说明
众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学习及使用正则表达式,便成了解决这一矛 ...