@q/webpack4-qcdn-plugin
支持 chunk file、dll 的 Webpack4 qcdn 上传插件。
本插件仅仅是对 webpack4-cdn-plugin 的一层包装,注意上传文件使用的是 qcdn.content 方法。 如有其他需要,请自行封装。
如果你的项目是基于 @vue/cli v.3.4+ 的,注意构建时请不要使用--modern 选项。因为 modern 和 legacy 两次构建是在不同的进程中运行的。(参考 CHANGELOG)
安装
npm install @q/webpack4-qcdn-plugin --registry=http://registry.npm.qiwoo.org/
webpack 版本
| webpack 4 | 支持绝大多数场景 |
| webpack 3 | 基本支持 (欢迎反馈问题) |
注意事项
-
插件顺序很重要,请在 uglifyjs-webpack-plugin 或其他压缩插件之前使用本插件
-
建议使用 Node 8+。
-
千万不要设置 output.publicPath!!!!
-
插件只在 production mode 生效。(process.env.NODE_ENV 设置为 production)
配置使用
在 webpack 配置文件中引入,并初始化。令配置对象为 config,则其可分为两部分(全部非必传):
-
config.qcdnOption: @q/qcdn 配置对象
-
config.maxRetryCount: 上传出错后,允许重试的次数(默认 5 次)
-
config.concurrency: 文件上传并发数量(默认为 5)
-
config.cachePath:缓存文件位置
-
config.preUpload (since v1.5.0):上传前 hook,如果缓存命中则不会执行,详见下面的示例
-
config.postUpload (since v1.5.0):上传后 hook,如果缓存命中则不会执行,详见下面的示例
-
其余字段:webpack4-cdn-plugin 的各项配置(后面有附录)
const Webpack4QCDNPlugin = require('@q/webpack4-qcdn-plugin')
if (process.env.NODE_ENV === 'production') {
const plugin = new Webpack4QCDNPlugin({
qcdnOption: {
https: true
},
concurrency: 5,
maxRetryCount: 5,
cachePath: 'node_modules/.cache/qcdn_cache.json',
async preUpload ({ file, content, extname }) {
return false
return 'https://my.domain/path/to/file.ext'
return true
},
async postUpload ({ url, file, content, extname })) {
if (!url) {
return false
}
return false
return url.replace(/^https?:/, '');
return url
return true
},
})
module.exports.plugins.push(plugin)
}
附:webpack4-cdn-plugin 配置
const WebpackCDNPlugin = require('webpack4-cdn-plugin')
module.exports = {
plugins: [
]
}
if (process.env.NODE_ENV === 'production') {
const cdnPlugin = new WebpackCDNPlugin({
keepLocalFiles: false,
keepSourcemaps: false,
backupHTMLFiles: true,
manifestFilename: 'manifest.json',
assetMappingVariable: 'webpackAssetMappings'
})
module.exports.plugins.push(cdnPlugin)
}