Can uglify-js remove the console.log statements?

随声附和 提交于 2019-11-27 18:29:16

There's also another option called drop_console which has been added recently (late 2013)

drop_console -- default false. Pass true to discard calls to console.* functions

This is added to the grunt init config like this:

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

As taken from the grunt-contrib-uglify github documents

In the lastest uglify-js ( v2.4.3), a new compress option ‘pure_funcs’ is added. If I add the console.log functions to this array, it will be removed in the minified js file. The test code below shows how this option works. This is exactly what I want.

// 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' }

Quotes from https://github.com/mishoo/UglifyJS2

pure_funcs -- default null. You can pass an array of names and UglifyJS will assume that those functions do not produce side effects. DANGER: will not check if the name is redefined in scope. An example case here, for instance var q = Math.floor(a/b). If variable q is not used elsewhere, UglifyJS will drop it, but will still keep the Math.floor(a/b), not knowing what it does. You can pass pure_funcs: [ 'Math.floor' ] to let it know that this function won't produce any side effect, in which case the whole statement would get discarded. The current implementation adds some overhead (compression will be slower).

You can use Groundskeeper to do this though it will be a separate step.

for -c option, set drop_console to be true: uglifyjs app.js -m -c drop_console=true -o app.min.js

If you are using gulp, use 'gulp-strip-debug' to remove console, alert and debugger. https://www.npmjs.com/package/gulp-strip-debug

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!