Webpack一直是前端開發不能缺乏的重要工具,當中不少經常使用的組件配置,每每都沒有一個全局的認識和系統的學習,這篇文章旨在記錄webpack中一些經常使用的插件、配置、優化方案,做一個基礎的總結。javascript
描述:模版處理插件,協助將打包壓縮的文件名、路徑插入模版當中css
原理:將webapck
中entry
配置的chunk
或抽取的公共樣式,插入到提供的template
模版中,生成一個html
文件;將樣式的link
插入head
標籤中,script
插入head
或body
中。html
經常使用參數與使用示例:前端
import HtmlWebpackPlugin from 'html-webpack-plugin'
const config = {
...otherConfig,
plugins: [
new HtmlWebpackPlugin({
template: path.join(__dirname, 'index.html'), // 本地模版文件地址,會接受模版loader解析,默認爲ejs-loader
filename: 'index.html', // 相對output.path輸出文件名或路徑,能夠指定輸出目錄
templateContent: '<html></html>', // 不與template共存,可爲function,返回html字符串
inject: true, // 爲false不注入靜態文件,爲head將js注入head,爲true或body將js注入body底部
chunks: 'all', // 方便多個模版時,注入不一樣的chunk,字符串數組
excludeChunks: '', // 排除注入的chunk
showErrors: true, // 默認true,將錯誤信息輸出到頁面中
minify: html-minifier插件配置,壓縮html文件
xhtml: true, // 渲染的標籤自閉合
['custom_params']: 'xxx', // 能夠自定義參數名稱,均可以在模版內使用模版語法訪問到
}),
new HtmlWebpackPlugin({}) // 多個模版直接寫多個plugin就行
]
}
複製代碼
有了這些配置參數,足以常規的配置選項了,接下來再看下咱們對應的模版內須要如何使用HtmlWebpackPlugin的自定義參數。java
<!DOCTYPE html>
<html style="font-size:20px">
<head>
<meta charset="utf-8">
<title><%= htmlWebpackPlugin.options.title %></title>
<% for (var css in htmlWebpackPlugin.files.css) { %>
<link href="<%=htmlWebpackPlugin.files.css[css] %>" rel="stylesheet">
<% } %>
</head>
<body>
<div id="app">這裏面沒啥好看的,看下面的參數介紹</div>
<% for (var chunk in htmlWebpackPlugin.files.chunks) { %>
<script type="text/javascript" src="<%=htmlWebpackPlugin.files.chunks[chunk].entry %>"></script>
<% } %>
</body>
</html>
複製代碼
模版文件內能夠看出來,咱們總體使用的是一個htmlWebpackPlugin
參數,經過這個參數能夠訪問模版編譯時的webpack
對象,也能夠訪問options
內,咱們自定義的參數。那這個對象具體有哪些可訪問參數,能夠看看下面這個參數示意。webpack
var templateParams = {
compilation: compilation, // 編譯對象
webpack: compilation.getStats().toJson(), // stats
webpackConfig: compilation.options, // webpack配置,如:webpackConfig.output.publicPath
htmlWebpackPlugin: {
files: { // 配置的chunk與抽取的css樣式
css: ['index.css'],
js: ['common.js', 'index.js'],
chunks: {
common: {
entry: 'common.js',
css: ['index.css'],
},
index: {
entry: 'index.js',
css: ['index.css']
}
}
},
options: self.options // 傳遞給插件的自定義參數,如:title
}
}
複製代碼
除了這些,這個插件提供了一系列的生命週期事件,供其餘插件訪問,這裏就不作擴展了。web