const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const CompressionWebpackPlugin = require('compression-webpack-plugin');
chainWebpack: (config) => {
if (isProduction) {
config.plugin('uglifyJs').use(UglifyJsPlugin, [
{
uglifyOptions: {
warnings: false,
compress: {
// 移除 debugger
drop_debugger: true,
// 移除console.*函数
drop_console: true,
// 移除console.log的引用
// 例如 log = console.log, 移除log,同时移除console.log
pure_funcs: ['console.log'],
},
},
// 多进程并行运行
parallel: true,
// 抽取注释
extractComments: true,
},
]);
config.plugin('compressionPlugin').use(
new CompressionWebpackPlugin({
test: /\.(js|css|json|ico|svg|xml)$/, // 匹配文件格式
algorithm: 'gzip',
threshold: 10240, // 对超过10k的数据压缩
minRatio: 0.8, // 压缩比
deleteOriginalAssets: false, //是否删除源文件
})
);
}
}
例如pic.xml压缩之后就会变成pic.xml.gz
2.xml2js 是commonJS写的,所以不用转换
configureWebpack: {
//第三方模块没有AMD/commonJS规范版本,不进行转换和解析
module: {
noParse: /^(xml2js)$/,
},
},
3.代码层面
减少 import *as R from 'ramda' 这种全局引用 和main.js的全局引用