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

Jef*_*rey 39 javascript node.js uglifyjs2

我正在使用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);
Run Code Online (Sandbox Code Playgroud)

输出是:

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

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

Jos*_*hua 78

还有一个名为drop_console的选项最近已经添加(2013年末)

drop_console -- default false. Pass true to discard calls to console.* functions
Run Code Online (Sandbox Code Playgroud)

这被添加到grunt init配置中,如下所示:

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

取自grunt-contrib-uglify github文档

  • 请参阅https://github.com/gruntjs/grunt-contrib-uglify/blob/master/docs/uglify-examples.md将其添加到compress参数 (2认同)
  • 内作品咕噜-要求以及:`requirejs:{选择:{uglify2:{压缩:{drop_console:真正}}}}` (2认同)

Jef*_*rey 28

在最新的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' }
Run Code Online (Sandbox Code Playgroud)

来自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']让它知道此函数不会产生任何副作用,在这种情况下整个语句将被丢弃.当前实现增加了一些开销(压缩会更慢).


Kiw*_*Lau 5

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