- 需要将某个chunk内联。
- 需要移动某个chunk的位置,由body移动到head。
- 甚至是不需要某个chunk,这种能够自定义操作出口的文件的可能。
- 添加一段路径或者内联一段代码.
- 有时候可能说某个出口chunk,必如来自第三方包的出口文件需要开启cdn,但其他的chunk不需要
key | Description(优先级*) | value(type) | default |
---|---|---|---|
basePath | 添加的路径前缀 | url | `` |
cssChunk | 需要添加chunk名称* | chunkName/all/[chunkName] | `` |
jsChunk | 需要添加chunk名称* | chunkName/all/[chunkName] | `` |
customBase | 自定义设置路径的函数** | 回调函数 function(返回值) | `` |
start | 添加一个文件的路径的位置 | start/end | end |
addPath | 添加文件的对象* | Object{js/css} | `` |
customAdd | 自定义添加文件的函数** | 回调函数 function | `` |
InlineChunk | 将chunk变为内联 | chunkName/[chunkName] | `` |
const customChunkWebpackPlugin = require('custom-chunk-webpack-plugin')
{
entry: 'index.js',
output: {
path: __dirname + '/dist',
filename: 'index_bundle.js'
},
plugins: [
new customChunkWebpackPlugin({
basePath:'http://...',
jsChunk:'vendors',
cssChunk:'all',
InlineChunk:'runtime',
})
]
}
new customChunkWebpackPlugin({
basePath:'http://...',
jsChunk:['vendors','app'],
cssChunk:'all',
})
new customChunkWebpackPlugin({
basePath:'http://...',//无效
jsChunk:['vendors','app'],//无效
cssChunk:'all',//无效
customBase:asset =>{ //有效 函数优先级最高
asset['js'][0] = 'http://...' + asset['js'][0]
return asset
},
})
new customChunkWebpackPlugin({
InlineChunk:'runtime'
})
new customChunkWebpackPlugin({
InlineChunk:['runtime','app']
})
// 这种方式添加的所有都基于start的值来,默认是end 添加到当前已有的chunk后面
// js只会添加到body无法移动到head
new customChunkWebpackPlugin({
start:'start',
addPath:{
js:'http://cdn.comxxx.js',
css:['http://cdn.com/xx/xx.css','/xx/xx.css']
},
})
//参数head和body都是之后的html标签所需要加载的内容的数组项
//你可以通过head.set 或者body.set 的方法来插入你要的内容
//如果你需要更自由的方式 那你可以直接操作这两个对象
new customChunkWebpackPlugin({
//set的方式body与head使用方式相同 以head为例,参数只能是数组 否则无效
//插入的位置同样以start来作为位置的标识
customAdd:(head,body)=>{
head.set([
{
type:'Inline', //存在src的值 也会只处理Inline
innerHTML:'var a = 1', //到这一部的代码是无法再压缩的
tag:'css', //插件不会去检查是否合格,很明显这是错误的 他将生成 style标签 但值是js
src:'http://xxxx.xxx'
},
{
type:'Inline',
innerHTML:'var a = 1', //到这一部的代码是无法再压缩的
tag:'js',
},
{
tag:'js',
src:'http://xxxx.xxx',
},
{
start:'start',
tag:'js',
src:'http://xxxx.xxx',
}
])
}
})
// 自定义操作head和body
// 插入节点的模板
let cssTemplate = {
tagName: 'link',
selfClosingTag: false,
voidTag: true,
attributes:{ href: '', rel: 'stylesheet' }
}
let jsTemplate = {
tagName:'script',
closeTag: true,
attributes:{ type: 'text/javascript',src: ''}
}
let InlinejsTemplate = {...this.jsTemplate,attributes:{ type: 'text/javascript' },innerHTML:''}
let InlinecssTemplate = {
tagName:'style',
closeTag: true,
attributes:{ type: 'text/css' },
innerHTML:''
}
new customChunkWebpackPlugin({
customAdd:(head,body)=>{
head.push({
tagName:'script',
closeTag: true,
attributes:{ type: 'text/javascript',src: ''http://xxxx.xxx''}
})
}
})