VueJS 2:如何从生产版本中删除 Console.log?
VueJS 2: How To Remove Console.log from Production Builds?
在IE中,只有在F12调试模式下才定义控制台。
所以我正在寻找一种方便的方式来管理 Vue
的编译
我希望能够在代码里面写console.log
alert('a');
console.log('only in development mode');
alert('b');
如果我在生产模式下编译,
命令控制台必须消失
alert('a');
alert('b');
如果我在开发模式下工作,
命令控制台必须出现
alert('a');
console.log('only in development mode');
alert('b');
在 VueJS 中,我有两种 webpack 配置:一种用于开发,一种用于生产 - 可以这样吗?
我无法正确配置 webpack 文件,
但我认为它是这样的:
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
module.exports.plugins = (module.exports.plugins || []).concat([
new UglifyJsPlugin({
sourceMap: true,
compress: {
drop_console: true,
warnings: false
},
comments: false
}),
])
据我所知,您无法删除日志语句。您可以做的是将它们包装在条件中:
if (debug === true) {
console.log('dev')
}
然后像你提到的那样,在你的 webpack 配置中设置调试变量。
debug = process.env.PRODUCTION !== true
如果您使用的是 vue-cli 3,您可以使用 npm install babel-plugin-transform-remove-console --save-dev
为此安装一个 babel 插件,并将以下配置添加到您的 babel.config.js
文件中:
const removeConsolePlugin = []
if (process.env.NODE_ENV === 'production') {
removeConsolePlugin.push('transform-remove-console')
}
module.exports = {
presets: [
'@vue/app'
],
plugins: removeConsolePlugin
}
源码中有针对旧版本 vue-cli 的其他答案 link
来源:https://forum.vuejs.org/t/remove-console-logs-from-production-buils/39327
camilos 解决方案对我不起作用,但这确实有效(vue cli 3.0):
npm i babel-plugin-transform-remove-console --save-dev
babel.config.js 文件:
module.exports = {
"presets": [...],
"plugins": [...],
"env": {
"production": {
"plugins": ["transform-remove-console"]
}
}
}
打开 build > webpack.prod.conf.js under "plugins" array for UglifyJsPlugin 您需要在压缩选项下添加 drop_console: true
。
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false,
drop_console: true <----- ADD THIS LINE
},
sourceMap: true
})
这是我的 babel.config.js
使用 Vue CLI 4 babel 插件 @vue/cli-plugin-babel
:
/* eslint-disable no-var */
module.exports = (api) => {
var isProd = api.cache.invalidate(() => process.env.NODE_ENV === 'production');
var plugins = [];
if (isProd) {
plugins.push(['transform-remove-console', { exclude: ['error', 'warn', 'info'] }]);
}
return {
presets: ['@vue/cli-plugin-babel/preset'],
plugins,
};
};
安装包作为开发依赖:npm i -D babel-plugin-transform-remove-console
Camilos 解决方案对我不起作用,但它是一个很好的提示。
经过一些调查,问题似乎是 process.env.NODE_ENV
而不是预期的 filled/defined。
我在我的 vue 应用程序中有我自己的环境文件,名称为:
.env
(本地环境)
.env.devlopment
(对于开发机器)
.env.test
(前)
.env.production
(当然是为了生产)
每个环境文件都包含这些属性:
VUE_APP_STAGE=production
VUE_APP_REST_BASE_URL=http://prodapp/rest
VUE_APP_NOTIFICATION_DURATION_MS=10000
我构建了我们的应用程序,例如npm run build -- --mode development
或 npm run build -- --mode local
。最后一个参数指定环境并导致在提到的环境文件之间切换。
我通过修改 babel.config.js
解决了在生产构建中避免控制台输出的问题:
const plugins = [];
//remove console outputs in production enviroment!
if (process.env.VUE_APP_STAGE === 'production') {
plugins.push('transform-remove-console')
}
module.exports = {
presets: [
'@vue/app'
],
plugins: plugins
}
查看 CLI 3 / 4
npm install babel-plugin-transform-remove-console --save-dev
在babel.config.js中:
module.exports = {
presets: [
'airbnb'
],
plugins: [
...process.env.NODE_ENV === 'production' ? ['transform-remove-console'] : []
],
};
在IE中,只有在F12调试模式下才定义控制台。 所以我正在寻找一种方便的方式来管理 Vue
的编译我希望能够在代码里面写console.log
alert('a');
console.log('only in development mode');
alert('b');
如果我在生产模式下编译, 命令控制台必须消失
alert('a');
alert('b');
如果我在开发模式下工作, 命令控制台必须出现
alert('a');
console.log('only in development mode');
alert('b');
在 VueJS 中,我有两种 webpack 配置:一种用于开发,一种用于生产 - 可以这样吗?
我无法正确配置 webpack 文件, 但我认为它是这样的:
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
module.exports.plugins = (module.exports.plugins || []).concat([
new UglifyJsPlugin({
sourceMap: true,
compress: {
drop_console: true,
warnings: false
},
comments: false
}),
])
据我所知,您无法删除日志语句。您可以做的是将它们包装在条件中:
if (debug === true) {
console.log('dev')
}
然后像你提到的那样,在你的 webpack 配置中设置调试变量。
debug = process.env.PRODUCTION !== true
如果您使用的是 vue-cli 3,您可以使用 npm install babel-plugin-transform-remove-console --save-dev
为此安装一个 babel 插件,并将以下配置添加到您的 babel.config.js
文件中:
const removeConsolePlugin = []
if (process.env.NODE_ENV === 'production') {
removeConsolePlugin.push('transform-remove-console')
}
module.exports = {
presets: [
'@vue/app'
],
plugins: removeConsolePlugin
}
源码中有针对旧版本 vue-cli 的其他答案 link
来源:https://forum.vuejs.org/t/remove-console-logs-from-production-buils/39327
camilos 解决方案对我不起作用,但这确实有效(vue cli 3.0):
npm i babel-plugin-transform-remove-console --save-dev
babel.config.js 文件:
module.exports = {
"presets": [...],
"plugins": [...],
"env": {
"production": {
"plugins": ["transform-remove-console"]
}
}
}
打开 build > webpack.prod.conf.js under "plugins" array for UglifyJsPlugin 您需要在压缩选项下添加 drop_console: true
。
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false,
drop_console: true <----- ADD THIS LINE
},
sourceMap: true
})
这是我的 babel.config.js
使用 Vue CLI 4 babel 插件 @vue/cli-plugin-babel
:
/* eslint-disable no-var */
module.exports = (api) => {
var isProd = api.cache.invalidate(() => process.env.NODE_ENV === 'production');
var plugins = [];
if (isProd) {
plugins.push(['transform-remove-console', { exclude: ['error', 'warn', 'info'] }]);
}
return {
presets: ['@vue/cli-plugin-babel/preset'],
plugins,
};
};
安装包作为开发依赖:npm i -D babel-plugin-transform-remove-console
Camilos 解决方案对我不起作用,但它是一个很好的提示。
经过一些调查,问题似乎是 process.env.NODE_ENV
而不是预期的 filled/defined。
我在我的 vue 应用程序中有我自己的环境文件,名称为:
.env
(本地环境).env.devlopment
(对于开发机器).env.test
(前).env.production
(当然是为了生产)
每个环境文件都包含这些属性:
VUE_APP_STAGE=production
VUE_APP_REST_BASE_URL=http://prodapp/rest
VUE_APP_NOTIFICATION_DURATION_MS=10000
我构建了我们的应用程序,例如npm run build -- --mode development
或 npm run build -- --mode local
。最后一个参数指定环境并导致在提到的环境文件之间切换。
我通过修改 babel.config.js
解决了在生产构建中避免控制台输出的问题:
const plugins = [];
//remove console outputs in production enviroment!
if (process.env.VUE_APP_STAGE === 'production') {
plugins.push('transform-remove-console')
}
module.exports = {
presets: [
'@vue/app'
],
plugins: plugins
}
查看 CLI 3 / 4
npm install babel-plugin-transform-remove-console --save-dev
在babel.config.js中:
module.exports = {
presets: [
'airbnb'
],
plugins: [
...process.env.NODE_ENV === 'production' ? ['transform-remove-console'] : []
],
};