Plugins(插件)
扩展 webpack
本身的一些功能,它们会运行在各种模块解析完成以后的打包编译阶段,比如对解析后的模块文件进行压缩等
插件是 webpack 的支柱功能。插件目的在于解决 loader 无法实现的其他事。
1.HtmlWebpackPlugin
作用:在打包结束后,⾃动生成⼀个 html
⽂文件,并把打包生成的 js 模块引⼊到该 html
中
安装:npm install --save-dev html-webpack-plugin
使用:1.在webpack.config.js
文件中使用require
语句引入
2.在plugins
中配置信息
配置信息:
1.filename
:生成的html文件名称,默认是 index.html
2.template
:html模板文件路径
3.title
:⽤来生成⻚面的 title
元素
4.inject
: true | 'head' | 'body' | false
,注⼊所有的资源到特定的 template
或者 templateContent
中,如果设置为 true
或者 body
,所有的 javascript
资源将被放置到 body
元素的底部,'head'
将放置到 head
元素中
5.favicon
: 添加特定的 favicon
路径到输出的 HTML
文件中
6.minify
: {} | false
, 传递 html-minifier
选项给 minify
输出
7.hash
: true | false
,如果为 true
,将添加 webpack
编译生成的 hash
到所有包含的脚本和 CSS
⽂件,对于解除 cache
很有用
cache
: true | false
,如果为 true
,这是默认值,仅在文件修改之后才会发布文件
showErrors
: true | false
,如果为 true
,这是默认值,错误信息会写入到 HTML
⻚面中
8.chunks
: 允许只添加某些块 (⽐如,仅 unit test 块)
9.chunksSortMode
: 允许控制块在添加到⻚面之前的排序方式,⽀持的值:'none' | 'default' |{function}-default:'auto'
10.excludeChunks
: 允许跳过某些块,(⽐如,跳过单元测试的块)
在 html
模板中,可以通过 <%=htmlWebpackPlugin.options.XXX%>
的方式获取配置的值
2.clean-webpack-plugin
作用:在每次构建前清理 /dist 文件夹
安装:npm install --save-dev clean-webpack-plugin
使用:1.在webpack.config.js
文件中使用require
语句引入
2.在plugins
中配置信息
3.mini-css-extract-plugin
作用:提取 CSS
到一个单独的文件中
安装:npm install --save-dev mini-css-extract-plugin
使用:1.在webpack.config.js
文件中使用require
语句引入
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
2.与css-loader
配合使用,代替html-loader
3.在plugins
中配置信息
4.sourceMap
我们实际运行在浏览器的代码是通过 webpack
打包合并甚至是压缩混淆过的代码,所生成的代码并不利于我们的调试和错误定位,我们可以通过 sourceMap
来解决这个问题,sourceMap
本质是一个记录了编译后代码与源代码的映射关系的文件,我们可以通过 webpack
的 devtool
选项来开启 sourceMap
使用:直接在webpack.config.js
中配置即可
编译后会为每一个编译文件生成一个对应的 .map
文件,同时在编译文件中添加一段对应的 map
文件引入代码
同时,现代浏览器都能够识别 sourceMap
文件,如 chrome
,会在 Sources
面板中显示根据编译文件与对应的 map
文件定位到源文件中,有利于我们的调试和错误定位
5.webpackDevServer
每次的代码修改都需要重新编译打包,刷新浏览器,特别麻烦,我们可以通过安装 webpackDevServer
来改善这方面的体验
作用:自动刷新页面
安装:npm install --save-dev webpack-dev-server
启动:npx webpack-dev-server
或在package.json中添加scripts
,然后npm run server
使用:修改webpack.config.js
6.Proxy
作用:WebpackDevServer
内置了一个代理服务,通过内置代理就可以把我们的跨域请求转发目标服务器上(WebpackDevServer
内置的代理发送的请求属于后端 - node
,不受同源策略限制)
使用:在webpack.config.js
下的devServer
中配置proxy
后端路由配置:
前端代码发送ajax请求:
通过 proxy
设置,当我们在当前 WebpackDevServer
环境下发送以 /api
开头的请求都会被转发到 http://localhost:8787 目标服务器下
7.Hot Module Replacement
作用:局部(模块)更新,也就是不刷新页面,只更新变化的部分
使用:在webpack.config.js
中的devServer
进行配置hot
和hotOnly
开启 HMR
以后,当代码发生变化,webpack
即会进行编译,并通过 websocket
通知客户端(浏览器),我们需要监听处理来自 webpack
的通知,然后通过 HMR
提供的 API
来完成我们的局部更新逻辑