代碼自己的質量: 包括複雜度, 重複率, 代碼風格等。javascript
常見的代碼質量降低的緣由:css
常見的致使惡性循環的場景:html
爛代碼產生的常見緣由是業務壓力大,致使沒有時間或意願講究代碼質量。由於向業務壓力妥協而生產爛代碼以後,開發效率會隨之降低,進而致使業務壓力更大,造成一種典型的惡性循環。前端
爲了應對業務壓力,常見的作法就是向項目中增長人力,可是單純地增長人力的話,會由於風格不一致、溝通成本上升等緣由致使爛代碼更多。vue
那麼咱們應該如何解決呢?java
這是一個長期堅持的過程。node
創建代碼規範與Code Review制度git
我以爲統一項目目錄結構也是規範化的一種(好比咱們用腳手架建立項目模板), 一個規範化的目錄結構大大下降新人的上手成本。github
使用工具(linters)自動檢查代碼質量。typescript
將代碼質量檢查與代碼流動過程綁定。
質量檢查與代碼流動綁定後的效果:
備註:
1. 編輯時候: 經過編輯器插件, 實時查看質量檢查
2. 能夠利用CI(Jekins/Travis)把構建發佈過程搬到線上, 先跑代碼掃描, 測試代碼等, 而後沒有錯誤再進行build, build成功經過ssh推到服務器。
複製代碼
以團隊總體爲視角,集中管理代碼規範,並實現質量情況透明化。
當團隊規模愈來愈大,項目愈來愈多時,代碼質量管控就會面臨如下問題:
不一樣項目使用的代碼規範不同
部分項目因爲放鬆要求,沒有接入質量檢查,或者存在大量未修復的缺陷
沒法從團隊總體層面上體現各個項目的質量情況對比
爲了應對以上問題,須要建設中心化的代碼質量管控體系,要點包括:
代碼規範統一管理。經過腳手架命令垂直管理代碼掃描配置規則集, 自動安裝,不在本地寫規則。一個團隊、一類項目、一套規則。
[待定] 使用統一的持續集成服務(Jekins/Travis等)。質量檢查不經過的項目不能上線。
[待定] 創建代碼質量評分制度(藉助Sonar)。讓項目與項目之間可以橫向對比,項目自身可以縱向對比,而且進行彙總反饋。
代碼質量是團隊技術水平和管理水平的直接體現。
看代碼的時間遠遠多於寫代碼的時間
經過哪些手段來保證代碼質量?
EditorConfig在多人協做開發項目時候, 支持跨編輯器, IDE來支持維護一致的編碼樣式(文件格式)。
VSCode插件EditorConfig for VS Code提供一鍵生成.editorconfig。
查看實例。
Git能在特定的重要動做發生時觸發自定義腳本。 有兩組這樣的鉤子:客戶端的和服務器端的。 客戶端鉤子由諸如提交和合並這樣的操做所調用,而服務器端鉤子做用於諸如接收被推送的提交這樣的聯網操做, 咱們目前使用的大多數是客戶端鉤子。
經過husky集成git hooks, 若是對git想有更全面的理解推薦閱讀GIt文檔。
husky會安裝一系列的git hook到項目的.git/hook目錄中。
下面兩張圖分別對比沒有安裝husky與安裝了husky的git目錄區別:
當你用 git init 初始化一個新版本庫時,Git 默認會在這個目錄中放置一些示例腳本(.sample結尾的文件)。
pre-commit 鉤子在鍵入提交信息前運行。 它用於檢查即將提交的快照,你能夠利用該鉤子,來檢查代碼風格是否一致(運行相似 lint 的程序。
關於爲何選擇prettier, 以及eslint 與prettier區別?。
關於prettier配置。 關於stylelint配置。 關於eslint配置。
commit-msg 能夠用來在提交經過前驗證項目狀態或提交信息, 使用該鉤子來覈對提交信息是否遵循指定的模板。
關於git hooks在package.json配置:
更新日誌, standard-version。
採用中心化集中管理代碼掃描配置文件的思路, 把code lint配置文件作成一個npm包發到內網, 而後擴展腳手架命令一鍵執行下發遠程配置文件到本地項目, 而且把新增的package.json依賴打進來, 你們後面再安裝新的依賴便可。
所謂中心化管理: 全部項目代碼配置文件以遠程配置文件爲準, 若是你本地有同名配置會被刪除, 這樣方便後續咱們更新配置文件好比(增長vw/vh適配), 以及全部業務同步問題。
目前只有基於vue.js項目的lint腳本命令, 後續有別的項目, 考慮經過
dc-cli lint -- vue
dc-cli lint -- node
擴展
複製代碼
demo演示如何在舊項目中植入代碼質量檢測? 因爲這部分是在內網演示就不發不出來了。
至於腳手架能夠參考我以前的demoeasy-cli。這是比較全的demo。
SonarQube 是一款領先的持續代碼質量監控平臺,開源在github 上,能夠輕鬆配置在內網服務器,實時監控代碼,幫助瞭解提高提高團隊項目代碼質量。經過插件機制,SonarQube能夠繼承不一樣的測試工具,代碼分析工具,以及持續集成工具。
與持續集成工具(例如 Hudson/Jenkins 等)不一樣,SonarQube 並非簡單地把不一樣的代碼檢查工具結果(例如 FindBugs,PMD 等)直接顯示在 Web 頁面上,而是經過不一樣的插件對這些結果進行再加工處理,經過量化的方式度量代碼質量的變化,從而能夠方便地對不一樣規模和種類的工程進行代碼質量管理。
行業內提到"代碼質量管理, 自動化質量管理", 通常指的都是經過Sonar來實現。
用Sonar可以實現什麼?
sonar支持多種編程語言, 其中包括JavaScript. 如sonarjs