使用terser-webpack-plugin插件打包时去掉console

3,134 阅读1分钟

通过npm包 terser-webpack-plugin 来实现

第一步:安装

npm install -D terser-webpack-plugin@4.2.3

第二步:配置 (vue.config.js)

const TerserPlugin = require('terser-webpack-plugin') module.export = {
   chainWebpack (config) { config.optimization.minimizer([new TerserPlugin({  terserOptions: {   mangle: true, // 混淆,默认也是开的,mangle也是可以配置很多选项的,具体看后面的链接   compress: {    drop_console: true,//传true就是干掉所有的console.*这些函数的调用.    drop_debugger: true, //干掉那些debugger;    pure_funcs: ['console.log'] // 如果你要干掉特定的函数比如console.info ,又想删掉后保留其参数中的副作用,那用pure_funcs来处理   }  } })])},
 }

以上为正确的配置。vue/cli版本是3.9.0.

配置经过:

报错1  

TypeError: Cannot read property 'javascript' of undefined at E:\work\package\20集成测试\IdeologicalEducationNew\node_modules\terser-webpack-plugin\dist\

参考

stackoverflow.com/questions/6…

Hi you are using Webpack 4 and Terser ^5.0.0. This version of Terser is for Webpack 5, you need to set version "terser-webpack-plugin": "^4.2.3", in package.json file

这是因为最初插件版本不对,terser-webpack-plugin@5.2.4是vue/cli4对应webpack5的。所以将版本降级解决。

报错2

做如下配置时

configureWebpack: (config) => { // 添加如下代码 if (process.env.NODE_ENV === 'production') {  config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true }},

会报options不是一个function,问题点出在  没有在vue.config.js里引插件,下面这句代码没加

const TerserPlugin = require('terser-webpack-plugin')

即使上面报错解决依然有问题,就是代码里已有configureWebpack这个配置且是对象,改造为函数会报其他错,所以放弃此种方案。

另外还有其他方法。

www.jianshu.com/p/96353576a…

www.jianshu.com/p/58a510acb…