javascript - plugin - uglifyjs example
¿Puede uglify-js eliminar las instrucciones console.log? (5)
Estoy usando uglify-js para minimizar el código fuente. Quiero eliminar las instrucciones console.log del código fuente original. ¿Es posible? ¿O hay alguna otra herramienta de compresor que lo soporte?
Uso el código de la siguiente manera en 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);
El resultado es:
$node m.js
{ code: ''var name=function(){var a="test";return a};console.log("log data");'',
map: ''null'' }
En el código minificado, console.log no se elimina.
En las últimas uglify-js (v2.4.3), se agrega una nueva opción de compresión ''pure_funcs''. Si agrego las funciones de console.log a esta matriz, se eliminarán 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 uglify-js
pure_funcs - valor predeterminado nulo. Puede pasar una serie de nombres y UglifyJS asumirá que esas funciones no producen efectos secundarios. PELIGRO: no verificará si el nombre está redefinido en el alcance. Un ejemplo de caso aquí, por ejemplo var q = Math.floor (a / b). Si la variable q no se usa en otro lugar, UglifyJS la eliminará, pero aún mantendrá el Math.floor (a / b), sin saber lo que hace. Puede pasar pure_funcs: [''Math.floor''] para hacerle saber que esta función no producirá ningún efecto secundario, en cuyo caso la declaración completa se descartaría. La implementación actual agrega algunos gastos generales (la compresión será más lenta).
Puede usar Groundskeeper para hacer esto, aunque será un paso separado.
Si está usando gulp, use ''gulp-strip-debug'' para eliminar la consola, la alerta y el depurador. https://www.npmjs.com/package/gulp-strip-debug
También hay otra opción llamada drop_console que se ha agregado recientemente (finales de 2013)
drop_console -- default false. Pass true to discard calls to console.* functions
Esto se agrega a la configuración init de grunt de la siguiente manera:
grunt.initConfig({
uglify: {
options: {
compress: {
drop_console: true // <-
}
},
my_target: {
files: {
''dest/output.min.js'': [''src/input.js'']
}
}
}
});
Según lo tomado de los documentos guntub gruunt-contrib-uglify
para la opción -c , configure drop_console para que sea verdadero : uglifyjs app.js -m -c drop_console=true -o app.min.js