-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDynamicChunksPlugin.js
More file actions
35 lines (31 loc) · 1.36 KB
/
DynamicChunksPlugin.js
File metadata and controls
35 lines (31 loc) · 1.36 KB
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
28
29
30
31
32
33
34
35
/**
* hack:html-webpack-plugin@3.x版本动态注入资源bug
*
* @author lllllxt
* @see https://github.com/lllllxt/DynamicChunksPlugin
*
*/
class DynamicChunksPlugin {
apply(compiler) {
// 注册compilation钩子HtmlWebpackPlugin 3
compiler.hooks.compilation.tap('DynamicChunksPlugin', compilation => {
compilation.hooks.htmlWebpackPluginBeforeHtmlGeneration.tapAsync('DynamicChunksPlugin', (data, cb) => {
const plugin = data.plugin // HtmlWebpackPlugin实例
const allowChunks = plugin.options.chunks // vue.config.js 中pages配置的
const allChunks = compilation.getStats().toJson().chunks
// 过滤需要的chunks
let chunks = allChunks.filter(chunk => chunk.names.some(name => allowChunks.some(v => name.includes(v))))
// 获取到splitChunk切包后的chunks后,调用HtmlWebpackPlugin实例内部方法排序
// Sort chunks
chunks = plugin.sortChunks(chunks, plugin.options.chunksSortMode, compilation)
// 调用HtmlWebpackPlugin实例内部方法获取静态资源配置
// Get assets
const assets = plugin.htmlWebpackPluginAssets(compilation, chunks)
// Merge assets 直接data.assets={} 不会作用到后续生命周期钩子中
Object.assign(data.assets, assets)
cb(null, data)
})
})
}
}
module.exports = DynamicChunksPlugin