:::info 关于UglifyJS:
    webpack默认提供了UglifyJS插件来压缩js代码,但是它使用的是单线程压缩代码,也就是说多个js文件需要被压缩,它需要一个个文件进行压缩。所以说在正式环境打包压缩代码速度非常慢(因为压缩js代码需要先把代码解析成用Object抽象表示的AST语法树,再去应用各种规则分析和处理AST,导致这个过程耗时非常大)。 :::

    使用UglifyJS压缩代码配置如下:

    1. module.exports = {
    2. plugins: [
    3. new webpack.optimize.UglifyJsPlugin({
    4. sourceMap: false,
    5. compress: {
    6. // 在UglifyJs删除没有用到的代码时不输出警告
    7. warnings: false,
    8. // 删除所有的 `console` 语句,可以兼容ie浏览器
    9. drop_console: true,
    10. // 内嵌定义了但是只用到一次的变量
    11. collapse_vars: true,
    12. // 提取出出现多次但是没有定义成变量去引用的静态值
    13. reduce_vars: true,
    14. },
    15. output: {
    16. // 最紧凑的输出
    17. beautify: false,
    18. // 删除所有的注释
    19. comments: false,
    20. }
    21. })
    22. ]
    23. }

    :::warning 关于ParallelUglifyPlugin:
    当webpack有多个JavaScript文件需要输出和压缩时,原来会使用UglifyJS去一个个压缩再输出,但是ParallelUglifyPlugin则会开启多个子进程,把对多个文件的压缩工作分配给多个子进程去完成。每个子进程其实还是通过UglifyJS去压缩代码,但是变成了并行执行。所以能更快的完成对多个文件的压缩工作。 :::

    使用ParallelUglifyPlugin压缩代码配置如下:

    1. const path = require('path');
    2. const ParallelUglifyPlugin = require('webpack-parallel-uglify-plugin');
    3. module.exports = {
    4. plugins: [
    5. // 使用 ParallelUglifyPlugin 并行压缩输出的 JS 代码
    6. new ParallelUglifyPlugin({
    7. // 传递给 UglifyJS 的参数
    8. uglifyJS: {
    9. output: {
    10. // 最紧凑的输出
    11. beautify: false,
    12. // 删除所有的注释
    13. comments: false,
    14. },
    15. compress: {
    16. // 在UglifyJs删除没有用到的代码时不输出警告
    17. warnings: false,
    18. // 删除所有的 `console` 语句,可以兼容ie浏览器
    19. drop_console: true,
    20. // 内嵌定义了但是只用到一次的变量
    21. collapse_vars: true,
    22. // 提取出出现多次但是没有定义成变量去引用的静态值
    23. reduce_vars: true,
    24. }
    25. }
    26. })
    27. ]
    28. };