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。

回答:

在最新的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将删除它,但仍保留M​​ath.floor(a /

b),而不知道它做什么。您可以传递pure_funcs:[‘Math.floor’]使其知道该函数不会产生任何副作用,在这种情况下,整个语句将被丢弃。当前的实现增加了一些开销(压缩会更慢)。

以上是 uglify-js可以删除console.log语句吗? 的全部内容, 来源链接: utcz.com/qa/404110.html

回到顶部