我正在使用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。
答案 0 :(得分:74)
还有另一个名为drop_console的选项,最近已添加(2013年末)
drop_console -- default false. Pass true to discard calls to console.* functions
这被添加到grunt init配置中,如下所示:
grunt.initConfig({
uglify: {
options: {
compress: {
drop_console: true // <-
}
},
my_target: {
files: {
'dest/output.min.js': ['src/input.js']
}
}
}
});
答案 1 :(得分:27)
在最新的uglify-js(v2.4.3)中,添加了一个新的压缩选项'pure_funcs'。如果我将console.log函数添加到此数组,它将在缩小的js文件中删除。下面的测试代码显示了此选项的工作原理。这正是我想要的。
// 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
的报价pure_funcs - 默认为null。您可以传递一组名称,UglifyJS将假定这些函数不会产生副作用。 危险:不会检查名称是否在范围内重新定义。一个例子 这里的例子,例如var q = Math.floor(a / b)。如果变量q不是 在其他地方使用过,UglifyJS会放弃它,但仍会保留 Math.floor(a / b),不知道它的作用。你可以传递pure_funcs:[ 'Math.floor']让它知道这个函数不会产生任何 副作用,在这种情况下,整个陈述将被丢弃。 当前的实现增加了一些开销(压缩将是 慢)。
答案 2 :(得分:3)
您可以使用Groundskeeper执行此操作,但这将是一个单独的步骤。
答案 3 :(得分:2)
-c 选项,将 drop_console 设置为 true :
uglifyjs app.js -m -c drop_console=true -o app.min.js
答案 4 :(得分:0)
如果您正在使用gulp,请使用'gulp-strip-debug'删除控制台,警报和调试程序。 https://www.npmjs.com/package/gulp-strip-debug