分分鐘清除項目中無用的 console-log 代碼
前言
說起console.log
調試,不用多說,那是非常的好用,開發中幫助我們解決了不少Bug
。我們經常能在開發環境中看見這一坨一坨的console
調試。但是生產環境是絕不對不允許出現console
信息代碼的。你還在手動一個一個刪除嗎,那得多累啊!
下面我們來看一下這幾種方式清除生產環境console
無用代碼。
基本操作
Webpack 配置
uglifyjs-webpack-plugin
uglifyjs-webpack-plugin
我們可以看一下該插件介紹,該插件是用於減少我們代碼js
代碼體積。並且如果安裝運行該插件的話,node
版本是在v6.9.0+
和Webpack
版本v4.0.0+
。
官網地址看這裏:uglifyjs-webpack-plugin
安裝
npm i uglifyjs-webpack-plugin
使用
在webpack.config.js
文件下進行如下配置。
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
module.exports = {
// 省略...
mode: "production",
optimization: {
minimizer: [
new UglifyJsPlugin({
uglifyOptions: {
// 刪除註釋
output:{
comments: false
},
compress: {
drop_console: true, // 刪除所有調式帶有console的
drop_debugger: true,
pure_funcs: ['console.log'] // 刪除console.log
}
}
})
]
}
}
配置完上面代碼,重啓即可看到效果。注意:代碼只會在 production(生產環境)環境下有效,看上面我們的配置mode: production
,就是生產環境。來講解一下上面這倆個屬性drop_console
和pure_funcs
的區別,前者則是刪除所有帶 console 的前綴的調試方法,如:console.log
、console.table
、console.dir
只要帶有console
前綴則全部刪除。而後者則是配置,就是數組的值是什麼它纔會刪除什麼,比如pure_funcs:[console.log, console.dir]
那麼只會刪除這兩項,則不會刪除代碼中的console.table
代碼。
以上代碼放到生產環境下,console 調試代碼即可清除,但是還有一個問題需要注意,就是該插件只支持
ES5
語法,如果你的代碼中涉及到ES6
語法則會報錯。
terser-webpack-plugin
terser-webpack-plugin
該插件跟上面uglifyjs-webpack-plugin
一樣,都是用於減少我們代碼js
代碼體積。
看上面描述:如果你的Webpack
版本大於 5+,則不需要安裝此terser-webpack-plugin
插件,會自帶terser-webpack-plugin
。但你的Webpack
版本還是 4,則你需要安裝terser-webpack-plugin
4 的版本
安裝
npm i terser-webpack-plugin@4
使用
const TerserWebpackPlugin = require("terser-webpack-plugin");
module.exports = {
// 省略...
mode: "production",
optimization: {
minimizer: [
new TerserWebpackPlugin({
terserOptions: {
compress: {
warnings: true,
drop_console: true,
drop_debugger: true,
pure_funcs: ['console.log', "console.table"] // 刪除console
}
}
});
]
}
}
該插件功能與上面一樣,屬性用法也一樣,唯一該插件可支持ES6
語法。都是在生產環境代碼生效。
Vue-cli 配置
這是在Vue-cli
項目中推薦使用的清除 console 插件。更多介紹看這裏 babel-plugin-transform-remove-console
安裝
npm i babel-plugin-transform-remove-console --save-dev
使用
在項目根目錄babel.config.js
文件下配置。該插件不區分生產環境或者開發環境,只要你配置都能生效。
module.exports = {
plugins: [
"transform-remove-console"
]
}
// 生產環境如下配置
const prodPlugins = []
if (process.env.NODE_ENV === 'production') {
prodPlugins.push('transform-remove-console')
}
module.exports = {
plugins: [
...prodPlugins
]
}
簡單粗暴刪除
接下來這個可是一個騷操作,瞪大眼睛看好了,哈哈哈。直接重寫console.log
的方法。
console.log = function () {};
靈活運用 VScode 編輯器
微信截圖_20210805001715.png
使用
直接全局搜索本項目裏console.log
正則匹配,然後全部替換爲空即可。
console\.log\(.*?\)
手寫 Loader 刪除 console
我們來寫一個簡易版的清除 console 插件。
新建一個js
文件,我這裏名爲clearConsole.js
,其實這裏也是用正則去匹配然後替換爲空。如果不懂loader
則可看我這篇文章手寫一個 Sass-loader。
clearConsole.js
const reg = /(console.log\()(.*)(\))/g;
module.exports = function(source) {
source = source.replace(reg, "")
return source;
}
在Vue.config.js
配置
module.exports = {
// 省略...
configureWebpack: {
module: {
rules: [
{
test: /\.vue$/,
exclude: /node_modules/,
loader: path.resolve(__dirname, "./clearConsole.js")
},
{
test: /\.js$/,
exclude: /node_modules/,
loader: path.resolve(__dirname, "./clearConsole.js")
}
],
}
},
}
配置如上代碼就可以啦~,清除js
文件和vue
文件裏的console.log
。exclude
代表不去node_module
目錄下查找。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/-3Wd7jCKKkgaW5xA5VInug