Удалить console.logs с помощью Webpack & Uglify
Я пытаюсь удалить console.logs с помощью плагина Webpack Uglify, но похоже, что плагин Uglify, поставляемый в комплекте с Webpack, не имеет такой опции, его не упоминается в документации.
Я инициализирую uglify из webpack следующим образом: new webpack.optimize.UglifyJsPlugin()
Я понимаю, что я могу использовать автономный Uglify lib для получения всех параметров, но я не знаю, какой из них?
Проблема в том, что drop_console
не работает.
Ответы
Ответ 1
С UglifyJsPlugin
мы можем обрабатывать комментарии, предупреждения, журналы консоли, но не стоит удалять все это в режиме разработки. Сначала проверьте, используете ли вы webpack
для prov env or dev env
, если это prod env
то вы можете удалить все это, например:
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
},
})
]
: []
Ссылка: https://github.com/mishoo/UglifyJS2#compressor-options
ОБНОВЛЕНИЕ 2019 Теперь нужно использовать плагин terser для поддержки ES6 в 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,
},
},
}),
],
},
};
Ответ 2
Попробуйте drop_console:
plugins: [
new Webpack.optimize.UglifyJsPlugin({
compress: {
drop_console: true,
}
}
]
Обновление: Для веб-пакета v4 оно немного изменилось:
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
...
optimization: {
minimizer: [
new UglifyJSPlugin({
uglifyOptions: {
compress: {
drop_console: true,
}
}
})
]
}
Я лично считаю, что журналы консоли (особенно console.error
) очень полезны для prod, и я думаю, что это хорошая идея - хранить их. Если вы действительно хотите отказаться от определенных функций консоли, таких как console.log
, вам следует использовать опцию pure_funcs
, например, pure_funcs: ['console.log']
, и это приведет к падению console.log
, поскольку чистые функции не вызывают побочных эффектов, тогда Uglify может отбросить те, которые не назначены ни для чего.
optimization: {
minimizer: [
new UglifyJSPlugin({
uglifyOptions: {
compress: {
// Drop only console.logs but leave others
pure_funcs: ['console.log'],
},
mangle: {
// Note: I'm not certain this is needed.
reserved: ['console.log']
}
}
})
]
}
Для TerserJS (Uglify устарела tbh)
optimization: {
minimizer: [
new TerserPlugin({
terserOptions: {
compress: {
drop_console: true
}
}
})
]
}
Как уже говорилось, вы также можете использовать pure_funcs
альтернативно.
Ответ 3
Это новый синтаксис для Webpack v4:
optimization: {
minimizer: [
new UglifyJSPlugin({
uglifyOptions: {
compress: {
drop_console: true
},
output: {
comments: false
}
},
}),
],
},
Ответ 4
Для uglifyjs-webpack-plugin параметры обертки внутри объекта uglifyOptions:
plugins: [
new UglifyJSPlugin({
uglifyOptions: {
compress: {
drop_console: true
}
}
})
]
Ответ 5
Я добавил исчерпывающий ответ для webpack v4 с конфигурацией отладки
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
},
}
})
]
: []
}
Мои скрипты в package.json:
"webpackDev": "npm run clean && export NODE_ENV=development && npx webpack",
"webpackProd": "npm run clean && export NODE_ENV=production && npx webpack -p"
Ответ 6
это то, что я сделал для удаления alert() и console.log() из моих кодов. global_defs => заменить оповещения с помощью console.log, затем drop_console удаляет все console.logs, и теперь в моей консоли браузера ничего не отображается
new UglifyJsPlugin({
uglifyOptions: {
compress: {
global_defs: {
"@alert": "console.log",
},
drop_console: true
}
}
}),
версии плагина:
"webpack":3.12.0,
"webpack-cli": "^3.0.3",
"uglifyjs-webpack-plugin": "^1.2.5",
Прямо сейчас выпущен uglifyjs-webpack-plugin v1.2.6, и я использовал последние документы для этого, поэтому я полагаю, что с последним плагином тоже не будет проблем.
Ответ 7
Проверьте fooobar.com/questions/17639631/... для применения обновления (с использованием TerserPlugin) принятого ответа здесь для производственной сборки приложения реагирования, созданного через "create-реагировать-приложение"
Ответ 8
Используйте это лучше и работает const UglifyEsPlugin = require ('uglify-es-webpack-plugin')
module.exports = {
plugins: [
new UglifyEsPlugin({
compress:{
drop_console: true
}
}),
]
}