uglify-js可以删除console.log语句吗?

我使用uglify-js来缩小源代码。 我想删除原始源代码的console.log语句。 可能吗? 还是有没有其他的压缩机工具支持这个?

我在Node.js中使用下面的代码。

var uglify = require('uglify-js'); var originalSourceCode = 'var name = function(){var str = "test"; return str}; console.log("log data");'; var minifiedCode = uglify.minify(originalSourceCode, { fromString : true, mangle: {}, warnings: true }); console.log(minifiedCode); 

输出是:

 $node m.js { code: 'var name=function(){var a="test";return a};console.log("log data");', map: 'null' } 

在缩小的代码中,console.log不会被删除。

另外还有一个选项叫drop_console,最近已经添加了(2013年末)

 drop_console -- default false. Pass true to discard calls to console.* functions 

这被添加到grunt初始化configuration像这样:

 grunt.initConfig({ uglify: { options: { compress: { drop_console: true // <- } }, my_target: { files: { 'dest/output.min.js': ['src/input.js'] } } } }); 

从grunt-gub-uglify文件中获取

在最新的uglify-js(v2.4.3)中,增加了一个新的压缩选项“pure_funcs”。 如果我将console.log函数添加到这个数组中,它将在精简的js文件中被删除。 下面的testing代码显示了这个选项的工作原理。 这正是我想要的。

 // file: m.js var uglify = require('uglify-js'); var originalSourceCode = 'var name = function(){var str = "test"; return str}; console.log("log data" + name());'; var minifiedCode = uglify.minify(originalSourceCode, { fromString : true, mangle: {}, warnings: true, compress:{ pure_funcs: [ 'console.log' ] } }); console.log(minifiedCode); $node m.js WARN: Dropping side-effect-free statement [?:1,53] { code: 'var name=function(){var n="test";return n};', map: 'null' } 

来自https://github.com/mishoo/UglifyJS2的引&#x7528;

pure_funcs – 默认为空。 你可以传递一个名字的数组,UglifyJS会认为这些函数不会产生副作用。 危险:不会检查名称是否在范围内重新定义。 这里是一个例子,例如var q = Math.floor(a / b)。 如果variablesq没有在其他地方使用,UglifyJS将会放弃它,但仍然保留Math.floor(a / b),不知道它做了什么。 你可以通过pure_funcs:['Math.floor']让它知道这个函数不会产生任何副作用,在这种情况下,整个语句将被丢弃。 目前的实施增加了一些开销(压缩会更慢)。

尽pipe这将是一个单独的步骤,但您可以使用Groundskeeper来做到这一点。

对于-c选项,请将drop_console设置为trueuglifyjs app.js -m -c drop_console=true -o app.min.js

如果你使用gulp,使用'gulp-strip-debug'去除控制台,警报和debugging器。 https://www.npmjs.com/package/gulp-strip-debug