webpack4--uglifyjs-webpack-plugin

webpack4之前版本,压缩js代码:

//webpack.config.js

plugins:[
        new webpack.optimize.UglifyJsPlugin({
            compress:{
                warnings:false //移除警告
            }
        }),
        new webpack.optimize.DedupePlugin({
            'process.env.NODE_ENV':'"production"'  //设置为产品上线环境,进一步压缩js代码
        })
    ]

webpack4版本,UglifyJsPlugin 不再压缩 loaders。在未来很长一段时间里,需要通过设置 minimize:true 来压缩 loaders。参考 loader 文档里的相关选项。

loaders 的压缩模式将在 webpack 3 或后续版本中取消。

为了兼容旧的 loaders,loaders 可以通过插件来切换到压缩模式:

plugins: [
+   new webpack.LoaderOptionsPlugin({
+     minimize: true
+   })
  ]

不再需要 webpack.optimize.DedupePlugin。

1>webpack4中,webpack内置的JS压缩插件不能使用了,可以安装uglifyjs-webpack-plugin插件,使用同其他非内置插件;

webpack.config.js:
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
module.exports = {
  optimization: {
    minimizer: [
      new UglifyJsPlugin({
        test: /\.js(\?.*)?$/i,  //测试匹配文件,
        include: /\/includes/, //包含哪些文件
        excluce: /\/excludes/, //不包含哪些文件

        //允许过滤哪些块应该被uglified(默认情况下,所有块都是uglified)。 
        //返回true以uglify块,否则返回false。
        chunkFilter: (chunk) => {
            // `vendor` 模块不压缩
            if (chunk.name === 'vendor') {
              return false;
            }
            return true;
          }
        }),
  
        cache: false,   //是否启用文件缓存,默认缓存在node_modules/.cache/uglifyjs-webpack-plugin.目录
        parallel: true,  //使用多进程并行运行来提高构建速度
    ],
  },
};

更多用法参考如下官方文档:

https://www.npmjs.com/package/uglifyjs-webpack-plugin

2> --mode production 表示生产环境,只要配置在package.json的script里面, js自动就压缩了

//package.json
"scripts": {
    "dev": "webpack --mode development",
    "build": "webpack --mode production"
  },