uglifyjs drop_console / pure_funcs在webpack中不起作用

时间:2016-12-02 12:41:40

标签: optimization webpack uglifyjs

我有以下配置,但它仍然没有删除console.log语句:

    new webpack.optimize.UglifyJsPlugin({
  compress: {
      warnings: false,
      pure_funcs: [ 'console.log' ],
      drop_console : true,
      comments: false
    },
    pure_funcs: [ 'console.log' ],
    drop_console : true,
    comments: false        
})

我做错了什么?

3 个答案:

答案 0 :(得分:2)

您获得的消息可能是在控制台中调试消息,而不是console.log。我有一个类似的问题,我认为使用drop_console就足够了。我不得不添加drop_debugger,所以给出你的例子,这应该删除所有控制台输出。

new webpack.optimize.UglifyJsPlugin({
  compress: {
    warnings: false,
    drop_console: true,
    drop_debugger: true
  },
  comments: false  
})

答案 1 :(得分:1)

在我的情况下,这不是uglifyjs的原因。它是由babel-loader引起的,它会将console.log转换为(e = console).log

我现在不知道如何修复它。最后,我必须使用名为babel-plugin-transform-remove-console的babel插件来删除控制台。

但我确实想使用UglifyJsPlugin。

这是对能够找到解决方案的人的暗示。

答案 2 :(得分:0)

我遇到了同样的问题drop_console无法在我的反应脚本设置中工作(在Windows 10上,React-script版本0.8.5)。

尝试重现此问题我创建了一个全新的应用,在App.js中添加了console.log,在webpack.config.prod.js中添加了drop_console: true。但是,在这个简单的设置中,drop_console可以正常工作,并且console.log已被删除。

由于它仍然无法在我的真实应用中运行,因此我安装了strip-loader

npm install --save-dev strip-loader

然后在webpack.config.prod.js中编辑了node_modules\react-scripts\config(没有退出反应):

var WebpackStrip = require('strip-loader'); // around line 20
...
// inserted in module/loaders between babel and style loaders, around line 168
  { 
    test: /\.js$/, 
    loader: WebpackStrip.loader('debug', 'console.log')
  },

果然,所有console.log语句都被删除了(npm run build)。然后,我从配置中删除了所有更改,console.log仍然被删除。我卸载了strip-loader,构建仍然成功删除了console.log个语句。

我无法解释这种行为,但至少它有效(尽管有些神奇)。