如何移除項目中無用的 console.log 代碼

大家好,我是若川。早些天時,我看到一個后端公眾號發《辭退了一個前端》,當時還想著現在后端公眾號都開始吊打前端了嘛。其中有個理由就是線上還一堆console.log...我猜很多人都會移除項目中無用的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_consolepure_funcs的區別,前者則是刪除所有帶console的前綴的調試方法,如:console.logconsole.tableconsole.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-plugin4的版本

安裝

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.logexclude代表不去node_module目錄下查找。

最近組建了一個湖南人的前端交流群,如果你是湖南人可以加我微信?ruochuan12?私信 湖南?拉你進群。


推薦閱讀

我在阿里招前端,該怎么幫你(可進面試群)
我讀源碼的經歷

面對 this 指向丟失,尤雨溪在 Vuex 源碼中是怎么處理的
老姚淺談:怎么學JavaScript?

·················?若川簡介?·················

你好,我是若川,畢業于江西高校。現在是一名前端開發“工程師”。寫有《學習源碼整體架構系列》多篇,在知乎、掘金收獲超百萬閱讀。
從2014年起,每年都會寫一篇年度總結,已經寫了7篇,點擊查看年度總結。
同時,活躍在知乎@若川,掘金@若川。致力于分享前端開發經驗,愿景:幫助5年內前端人走向前列。

識別方二維碼加我微信、拉你進源碼共讀

今日話題

略。歡迎分享、收藏、點贊、在看我的公眾號文章~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275575.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275575.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275575.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WCF - 服務實例管理模式

WCF 提供了三種實例上下文模式:PreCall、PreSession 以及 Single。開發人員通過 ServiceBehavior.InstanceContextMode 就可以很容易地控制服務對象的實例管理模式。而當 WCF 釋放服務對象時,會檢查該對象是否實現了 IDisposable 接口,并調用…

oracle io lost,磁盤IO故障

測試工作正在如火如荼的進行,突然數據庫就連接不上了。我連接上主機發現數據庫alert_sid日志中有如下信息:KCF: write/open error block0x9a6 online1file2 /oracle_data1/UNDOTBS3.dbferror27072 txt: Linux Error: 5: Input/output errorAdditional in…

易思匯完成近億元B輪融資,信中利投資

3月19日消息,近日,留學生在線付費平臺易思匯宣布已在3月份完成由信中利投資的近億元B輪融資。 易思匯聯合創始人高宇同表示,本輪融資將主要用于留學生信用卡、留學家庭金融商城等新產品布局,以及擴大團隊和市場投入。 易思匯成立…

遠程連接 錯誤 內部錯誤_關于錯誤的性質和原因。 了解錯誤因素

遠程連接 錯誤 內部錯誤Back in 2012, I was a young[er] product designer working in a small tech agency in Valencia, Spain. In parallel, I worked as a freelancer on several side projects for different clients. One day I was contacted by a new health services…

得到鵝廠最新前端開發手冊一份

又逢金九銀十,拿到大廠offer一直是程序員朋友的目標,但是去大廠就得拿出實力來。除了需要積累技術,了解并掌握面試的技巧,熟悉大廠面試流程,也必不可少。這里分享一份最新入職騰訊的前端社招面經,來看看鵝廠…

性能測試分析之帶寬瓶頸的疑惑

第一部分, 測試執行 先看一圖,再看下文 這個當然就是壓力過程中帶寬的使用率了,我們的帶寬是1Gbps的,合計傳輸速率為128MB/s,也正因為這個就讓我越來越疑惑了,不過通過壓力過程中的各項數據我又不得不相信。…

Android 中的LayoutInflater的理解

LayoutInflater與findViewById的區別? 對于一個已經載入的界面,就可以使用findViewById()方法來獲得其中的界面元素。對于一個沒有被載入或者想要動態載入的界面,就需要使用LayoutInflater對象的inflate()方法來載入。findViewById()是查找已…

linux rootfs編譯進內核,九鼎x6818開發板筆記:uboot、kernel、rootfs編譯和燒寫

下面記錄了如何搭建嵌入開發環境,如何編譯uboot、kernel、和文件系統,如何燒寫鏡像以及如何配置uboot環境變量。閱讀注意:記錄中(Base框中的內容)一些操作故意被添加,為了展示文件內容,故意調用cat(Ubuntu)或者type(wi…

figma下載_素描vs Figma困境

figma下載I distinctly remember how much hatred I had in my heart when I lived through my first UI update. The year was 2009; I had just gotten my braces off and I was ready to smash that ‘Like’ button on my high school crush’s status when I logged into …

祝大家七夕快樂,邀你源碼共讀,順帶發點紅包

大家好,我是若川。這是一個普通的周六。只不過又叫七夕節,祝大家七夕節快樂~所以就不更新技術文了。估計還是有很多讀者不知道我。若川名字由來是取自:上善若水,海納百川。順便放兩篇文章。我讀源碼的經歷,跟各位讀者朋…

windows 系統監視器 以及建議閥值

windows 系統監視器 以及建議閥值 計數器的說明可以在添加計數器那邊 資源 對象\計數器建議的閾值注釋磁盤Physical Disk\% Free SpaceLogical Disk\% Free Space15%磁盤Physical Disk\% Disk Time Logical Disk\% Disk Time90%磁盤Physical Disk\Disk Reads/sec、Physical Dis…

前端人員如何在linux服務器上搭建npm私有庫

為什么要搭建npm私有庫? 為了方便下載時,公共包走npmjs,私有包走內部服務器。npm包下載的速度較慢,搭建npm私有庫之后,會先操作私有庫中是否有緩存,有緩存直接走緩存,而不用重新再去請求一遍網絡。哪種方式…

硬幣 假硬幣 天平_小東西叫硬幣

硬幣 假硬幣 天平During the last 1,5 years, I’ve been traveling a lot. Apart from my must-have things like laptop, sketchbook, and power bank, there constantly appears a new one, in a familiar shape but a new look. That’s 在過去的1.5年中,我經常…

Linux創建一個用戶時分配組,useradd和groupadd(Linux創建用戶\用戶組\設置\分配用戶權限)的使用...

前言:man useradd    man groupadd    info useradd    info groupadd 都可以獲取相關命令的用法信息。個人比較喜歡讀英文解釋文檔,沒有你想象的那么complicated!😜USERADD(8) System Management Commands USERADD…

尤雨溪發布的Vue 3.2 有哪些新變化?

大家好,我是若川。今天分享一篇 Vue 3.2 版本的文章。查看源碼等系列文章。學習源碼整體架構系列、年度總結、JS基礎系列1前言8.10號凌晨,尤雨溪在微博平臺官宣 Vue 3.2 版本正式發布:此版本包含一系列重要的新功能與性能改進,但并…

對象的清除

調用System.gc() 請求垃圾回收的最簡單的方法,但是注意——只是請求,在調用System.gc()之后,有可能會釋放出更多的內存空間。轉載于:https://www.cnblogs.com/happykakeru/archive/2011/04/09/2010030.html

https://zeplin.io/ 設計圖標注及切圖

2019獨角獸企業重金招聘Python工程師標準>>> https://zeplin.io/ 轉載于:https://my.oschina.net/soho00147/blog/3025646

更好的設計接口_設計可以而且必須做得更好

更好的設計接口We live in a world that becomes more dependent on technology every day. Tech gives us new ways to communicate, learn, work, and play, and recently it enabled us to reveal the appalling police brutality towards black people in the US by sharin…

linux隱寫文件剝離,雜項的基本解題思路(1)——文件操作隱寫、圖片隱寫

文件操作隱寫圖片隱寫壓縮文件處理流量取證技術文章本來是分成4部分的,但是前兩部分何在一起寫了也就沒有分開,所以干脆就只分了兩部分文件基本類型的識別一、kail 下file 文件名原理就是識別文件文件頭比如這個軟件:二、WinHex通過winhex分析…

賬務管理系統

2011-04-11 21:55最近寫了一個賬務管理系統(個人版)使用C#語言編寫,編譯器VS2010,數據庫Access2010,系統采用三層架構,界面可以換膚, 窗體按鈕可以移動,可以自定義皮膚,保…