无法使用uglify-js删除console.log语句
Can uglify-js remove the console.log statements?
我正在使用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没有被删除。
最近(2013年末)添加了另一个名为drop_console的选项
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']
}
}
}
});
从grunt contrib uglify github文档中获取
在最新的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将删除它,但仍将保留数学。floor(a/b),不知道它做什么。您可以传递pure_funcs:['Math.floor'],让它知道这个函数不会产生任何副作用,在这种情况下,整个语句将被丢弃。当前的实现增加了一些开销(压缩较慢)。
对于-c选项,将drop_console设置为true:
uglifyjs app.js -m -c drop_console=true -o app.min.js
您可以使用Groundskeeper来完成此操作,尽管这将是一个单独的步骤。
如果您正在使用gump,请使用'gulp-stape-debug'删除控制台、警报和调试器。https://www.npmjs.com/package/gulp-strip-debug
- Array.length似乎不起作用;console.log则显示其他情况
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- console.log以外的Javascript输出函数
- 如果在代码末尾进行求值,jQuery-console.log将提供空数组
- 为什么生成器中的console.log会按这样的顺序出现
- async问题,JS Promise无法返回结果,但可以使用console.log
- 谷歌地图:函数返回未定义的值在console.log中运行良好
- 我应该返回一个类似console.log()的方法调用吗
- console.log无法运行Mac OS X
- 如何使console.log可配置
- 如何使用console.log语句在Mocha中测试函数
- 为什么我可以't直接将console.log()设置为回调函数
- Node.js/Express未输出console.log,highcharts.js给出未定义的错误
- console.log在角度控制器内不工作
- Mocking console.log()/MOCHA测试框架中的任何其他函数
- 如何使用console.log在因果报应测试中检查函数
- Console.log - getElementsByClassName
- nodejs console.log of object
- 监视JavaScript输出,例如console.log()
- AngularJS:console.log不显示任何内容