J'utilise uglify-js pour réduire le code source. Je souhaite supprimer les instructions console.log du code source d'origine. C'est possible? Ou y a-t-il un autre outil de compression qui supporte cela?
J'utilise le code comme ci-dessous dans 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);
La sortie est:
$node m.js
{ code: 'var name=function(){var a="test";return a};console.log("log data");',
map: 'null' }
Dans le code détaillé, le fichier console.log n'est pas supprimé.
Dans la dernière version d'uglify-js (v2.4.3), une nouvelle option de compression ‘pure_funcs’ est ajoutée. Si j'ajoute les fonctions console.log à ce tableau, il sera supprimé du fichier js minifié. Le code de test ci-dessous montre comment cette option fonctionne. C'est exactement ce que je veux.
// 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' }
Citations de https://github.com/mishoo/UglifyJS2
pure_funcs - null par défaut. Vous pouvez transmettre un tableau de noms et UglifyJS supposera que ces fonctions ne produisent pas d’effets secondaires . DANGER: ne vérifiera pas si le nom est redéfini dans la portée. Un exemple cas ici, par exemple var q = Math.floor (a/b). Si la variable q n'est pas utilisé ailleurs, UglifyJS le laissera tomber, mais gardera toujours le Math.floor (a/b), ne sachant pas ce qu'il fait. Vous pouvez passer pure_funcs: [ 'Math.floor'] pour lui faire savoir que cette fonction ne produira aucun effet secondaire, auquel cas la déclaration entière serait écartée . L'implémentation actuelle ajoute un surcoût (la compression sera Plus lente).
Il y a aussi une autre option appelée drop_console qui a été ajoutée récemment (fin 2013)
drop_console -- default false. Pass true to discard calls to console.* functions
Ceci est ajouté à la configuration de grunt init comme ceci:
grunt.initConfig({
uglify: {
options: {
compress: {
drop_console: true // <-
}
},
my_target: {
files: {
'dest/output.min.js': ['src/input.js']
}
}
}
});
Vous pouvez utiliser Groundskeeper pour le faire, bien que ce soit une étape distincte.
pour -c option, définissez drop_console pour qu'il soit vrai :
uglifyjs app.js -m -c drop_console=true -o app.min.js
Si vous utilisez gulp, utilisez 'gulp-strip-debug' pour supprimer console, alerte et débogueur . https://www.npmjs.com/package/gulp-strip-debug