J'essaie de supprimer console.logs avec le plug-in Uglify de Webpack, mais il semble que le plug-in Uglify fourni avec Webpack ne dispose pas de cette option, elle n'est pas mentionnée dans la documentation.
Je suis en train d'initialiser uglify à partir de webpack comme ceci: new webpack.optimize.UglifyJsPlugin()
Si j'ai bien compris, je peux utiliser la librairie autonome Uglify pour obtenir toutes les options, mais je ne sais pas laquelle?
Le problème est que drop_console
ne fonctionne pas.
Avec UglifyJsPlugin
, nous pouvons gérer des commentaires, des avertissements, des journaux de consoles , mais il ne serait pas judicieux de les supprimer en mode de développement. Commencez par vérifier si vous utilisez webpack
pendant prov env or dev env
, Si c'est prod env
alors vous pouvez supprimer tous ceux-ci, comme ceci:
var debug = process.env.NODE_ENV !== "production";
plugins: !debug ? [
new webpack.optimize.UglifyJsPlugin({
// Eliminate comments
comments: false,
// Compression specific options
compress: {
// remove warnings
warnings: false,
// Drop console statements
drop_console: true
},
})
]
: []
Référence: https://github.com/mishoo/UglifyJS2#compressor-options
UPDATE 2019 Nécessité d’utiliser le plug-in terser maintenant pour la prise en charge de l’ES6 dans Webpack v4 https://github.com/webpack-contrib/terser- webpack-plugin # terseroptions
webpack.config.js
module.exports = {
optimization: {
minimizer: [
new TerserPlugin({
sourceMap: true, // Must be set to true if using source-maps in production
terserOptions: {
compress: {
drop_console: true,
},
},
}),
],
},
};
Essayez drop_console :
plugins: [
new Webpack.optimize.UglifyJsPlugin({
compress: {
drop_console: true,
}
}
]
Mise à jour: Pour le Webpack v4 cela a un peu changé:
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
...
optimization: {
minimizer: [
new UglifyJSPlugin({
uglifyOptions: {
compress: {
drop_console: true,
}
}
})
]
}
Voici la nouvelle syntaxe pour Webpack v4:
optimization: {
minimizer: [
new UglifyJSPlugin({
uglifyOptions: {
compress: {
drop_console: true
},
output: {
comments: false
}
},
}),
],
},
Pour uglifyjs-webpack-plugin, encapsulez les options dans un objet uglifyOptions:
plugins: [
new UglifyJSPlugin({
uglifyOptions: {
compress: {
drop_console: true
}
}
})
]
c'est ce que j'ai fait pour supprimer alert () et console.log () de mes codes. global_defs => remplacer les alertes par console.log puis drop_console supprime tous les console.logs et maintenant rien ne s'affiche dans la console de mon navigateur
new UglifyJsPlugin({
uglifyOptions: {
compress: {
global_defs: {
"@alert": "console.log",
},
drop_console: true
}
}
}),
versions du plugin:
"webpack":3.12.0, "webpack-cli": "^3.0.3", "uglifyjs-webpack-plugin": "^1.2.5",
À l'heure actuelle, uglifyjs-webpack-plugin v1.2.6 a été publié et j'ai utilisé les dernières documentations pour celui-ci. Je suppose donc qu'il n'y aura pas de problème avec le dernier plugin.
J'ai ajouté une réponse complète pour Webpack v4 avec configuration de débogage
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
var debug = process.env.NODE_ENV !== "production";
.....
optimization: {
minimizer: !debug ? [
new UglifyJsPlugin({
// Compression specific options
uglifyOptions: {
// Eliminate comments
comments: false,
compress: {
// remove warnings
warnings: false,
// Drop console statements
drop_console: true
},
}
})
]
: []
}
Mes scripts dans package.json sont comme suit:
"webpackDev": "npm run clean && export NODE_ENV=development && npx webpack",
"webpackProd": "npm run clean && export NODE_ENV=production && npx webpack -p"