41

我正在使用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 没有被删除。

4

5 回答 5

81

最近添加了另一个名为 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']
      }
    }
  }
});

取自grunt-contrib-uglify github 文档

于 2014-01-09T12:29:58.147 回答
29

在最新的 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 -- 默认为空。您可以传递一个名称数组,UglifyJS 将假定这些函数不会产生副作用。危险:不会检查名称是否在范围内重新定义。这里有一个示例,例如 var q = Math.floor(a/b)。如果变量 q 没有在别处使用,UglifyJS 将删除它,但仍会保留 Math.floor(a/b),不知道它做了什么。你可以通过 pure_funcs: [ 'Math.floor' ] 让它知道这个函数不会产生任何副作用,在这种情况下整个语句将被丢弃。当前的实现增加了一些开销(压缩会更慢)。

于 2013-11-21T09:48:13.223 回答
4

您可以使用Groundskeeper来执行此操作,尽管这将是一个单独的步骤。

于 2013-11-20T09:54:31.567 回答
4

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

于 2017-01-07T12:31:23.677 回答
1

如果您使用 gulp,请使用 'gulp-strip-debug' 删除控制台、警报和调试器。 https://www.npmjs.com/package/gulp-strip-debug

于 2017-10-13T11:47:05.393 回答