:::info
关于UglifyJS:
webpack默认提供了UglifyJS插件来压缩js代码,但是它使用的是单线程压缩代码,也就是说多个js文件需要被压缩,它需要一个个文件进行压缩。所以说在正式环境打包压缩代码速度非常慢(因为压缩js代码需要先把代码解析成用Object抽象表示的AST语法树,再去应用各种规则分析和处理AST,导致这个过程耗时非常大)。
:::
使用UglifyJS压缩代码配置如下:
module.exports = {plugins: [new webpack.optimize.UglifyJsPlugin({sourceMap: false,compress: {// 在UglifyJs删除没有用到的代码时不输出警告warnings: false,// 删除所有的 `console` 语句,可以兼容ie浏览器drop_console: true,// 内嵌定义了但是只用到一次的变量collapse_vars: true,// 提取出出现多次但是没有定义成变量去引用的静态值reduce_vars: true,},output: {// 最紧凑的输出beautify: false,// 删除所有的注释comments: false,}})]}
:::warning
关于ParallelUglifyPlugin:
当webpack有多个JavaScript文件需要输出和压缩时,原来会使用UglifyJS去一个个压缩再输出,但是ParallelUglifyPlugin则会开启多个子进程,把对多个文件的压缩工作分配给多个子进程去完成。每个子进程其实还是通过UglifyJS去压缩代码,但是变成了并行执行。所以能更快的完成对多个文件的压缩工作。
:::
使用ParallelUglifyPlugin压缩代码配置如下:
const path = require('path');const ParallelUglifyPlugin = require('webpack-parallel-uglify-plugin');module.exports = {plugins: [// 使用 ParallelUglifyPlugin 并行压缩输出的 JS 代码new ParallelUglifyPlugin({// 传递给 UglifyJS 的参数uglifyJS: {output: {// 最紧凑的输出beautify: false,// 删除所有的注释comments: false,},compress: {// 在UglifyJs删除没有用到的代码时不输出警告warnings: false,// 删除所有的 `console` 语句,可以兼容ie浏览器drop_console: true,// 内嵌定义了但是只用到一次的变量collapse_vars: true,// 提取出出现多次但是没有定义成变量去引用的静态值reduce_vars: true,}}})]};
