Puede uglify-js quitar la consola.¿declaraciones de registro?


Estoy usando uglify-js para minificar el código fuente. Quiero quitar la consola.instrucciones de registro del código fuente original. Es posible? ¿O hay alguna otra herramienta de compresor que soporte esto?

Utilizo el código como se muestra a continuación en el nodo.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);

La salida es:

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

En el código minificado la consola.el registro no se elimina.

Author: Jeffrey, 2013-11-20

5 answers

También hay otra opción llamada drop_console que se ha añadido recientemente (finales de 2013)

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

Esto se agrega a la configuración de inicio de grunt de la siguiente manera:

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

Tomado de los documentos de github de grunt-contrib-uglify

 69
Author: Joshua,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-06 14:06:08

En el último uglify-js ( v2.4.3), se agrega una nueva opción de compresión 'pure_funcs'. Si agrego la consola.funciones de registro a esta matriz, se eliminará en el archivo js minificado. El siguiente código de prueba muestra cómo funciona esta opción. Esto es exactamente lo que quiero.

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

Citas de https://github.com/mishoo/UglifyJS2

Pure_funcs default default null. Puede pasar una serie de nombres y UglifyJS asumirá que esas funciones no producen efectos secundarios. PELIGRO: no comprobará si el nombre está redefinido en el ámbito. Ejemplo caso aquí, por ejemplo var q = Math.piso (a / b). Si la variable q no es utilizado en otro lugar, UglifyJS lo dejará caer, pero seguirá manteniendo el Matemáticas.piso (a / b), sin saber lo que hace. Usted puede pasar pure_funcs: [ Matemáticas.suelo'] para hacerle saber que esta función no producirá ninguna efecto secundario, en cuyo caso toda la declaración sería descartada. La implementación actual agrega algo de sobrecarga (la compresión será más lento).

 26
Author: Jeffrey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-21 09:48:13

Puede usar Jardinero para hacer esto, aunque será un paso separado.

 3
Author: Karl-Johan Sjögren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-20 09:54:31

Para la opción -c, establece drop_console como true: uglifyjs app.js -m -c drop_console=true -o app.min.js

 2
Author: KiwenLau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-07 12:31:23

Si está utilizando gulp, use 'gulp-strip-debug' para eliminar la consola, la alerta y el depurador. https://www.npmjs.com/package/gulp-strip-debug

 0
Author: pratik nagariya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-13 11:47:05