代碼檢測規范和git提交規范

摘要:之前開發的項目,代碼檢測和提交規范都是已經配置好的,最近自己新建的項目就記錄下相關配置過程。

1. ESlint配置

????????2013年6月創建開源項目,提供一個插件化的JavaScript代碼檢測工具,創建項目是生成的eslintrc.js文件;

//Eslint配置文件遵循commonJS的導出規則,所導出的的對象就是ESLint的配置對象

//官方文檔:https://www.tkcnn.com/eslint/core-concepts.html

// Eslint配置文件遵循commonJS的導出規則,所導出的的對象就是ESLint通的配置對象
// 文檔:https://eslint.bootcss.com/docs/user-guide/configuring
module.exports = {// 表示當前目錄即為根目錄,ESLint規則將被限制到該目錄下root: true,// env表示啟用ESLint檢測的環境env: {// node環境下啟動ESLint檢測node: true},// ESLint中基礎配置需要繼承的配置;extends: ['plugin:vue/vue3-essential','@vue/standard'],// 解析器:表述需要解析的內容parserOptions: {parser: 'babel-eslint'},// rules中需要修改的啟用規則(key表示啟用的規則)及其各自的錯誤級別/*** 錯誤級別分為三中:* "off"或者0 - 關閉規則* "warn"或者1 - 開啟規則,使用警告級別的錯誤:warn (不會導致程序退出)* "error"或者2 - 開啟規則,使用錯誤界別的錯誤:error(當被觸發的時候,程序會退出)*/rules: {'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off','no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off','space-before-function-paren': 'off'   //關閉此規則}
}

2. Prettier配置

? ? ? ? Prettier是代碼格式化工具,具有開箱即用、直接集成到vscode的特點。保存時,讓代碼直接符合ESLint,prettier配置步驟如下:

  • vscode安裝prettier可以在配置prettierrc時獲得一些提示;
  • 根目錄新增prettierrc文件,配置的JSON內容如下:
{//semi:表示js語句結尾是否尾隨分號;"semi": false,//singleQuote:表示是否用單引號代替所有雙引號;"singleQuote": true,//trailingComma:表示多行語法中,是否需要再最后一行添加逗號,有all\es5\none三個值;"trailingComma": "none"
}

注:也可以使用這樣的配置

module.exports = {eslintIntegration: true,printWidth: 160, // 指定代碼長度,超出換行tabWidth: 2, // tab 鍵的寬度useTabs: false, // 不使用tabsemi: true, // 結尾加上分號singleQuote: true, // 使用單引號quoteProps: 'as-needed', // 要求對象字面量屬性是否使用引號包裹trailingComma: 'none', // 確保對象的最后一個屬性后有逗號bracketSpacing: true, // 大括號有空格 { name: 'rose' }arrowParens: 'always', // 箭頭函數,單個參數添加括號requirePragma: false, // 是否嚴格按照文件頂部的特殊注釋格式化代碼insertPragma: false, // 是否在格式化的文件頂部插入Pragma標記,以表明該文件被prettier格式化過了proseWrap: 'preserve', // 按照文件原樣折行htmlWhitespaceSensitivity: 'ignore', // html文件的空格敏感度,控制空格是否影響布局endOfLine: 'auto' // 結尾是 \n \r \n\r auto
};
  • vscode的設置中找到save,勾選Format on save;

????????綜上實現保存后,自動格式化代碼的目的。此外,還需要處理幾處細節

  1. vscode→首選項→設置→搜Tab Size設置制表符為兩個空格2
  2. 如果vscode安裝了多個代碼格式化工具,可以右鍵選中『使用...格式化文檔』配置默認的格式化程序
  3. ESLint和prettier之間沖突:space-before-function-paren;在ESLInt的rules中配置關閉:
'space-before-function-paren': 'off'

3. Git提交規范

????????Angular團隊Conventional Commits specification約定式提交,規范鏈接(約定式提交)。提交說明的結構如下所示

<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
譯文:
<類型>[可選 范圍]: <描述>
[可選 正文]
[可選 腳注]

3.1 Commitizen

????????使用Commitizen進行代碼提交(git commit)時,commitizen會再提交時填寫所必須提交的字段;

1.全局安裝Commitizen(建議使用有管理員權限的終端)

sudo npm install -g commitizen@4.2.4

2.安裝配置cz-customizable插件

????????1.使用npm下載cz-customizable

npm i cz-customizable@6.3.0 --save-dev

????????2.添加下列配置再package.json中

...
"config": {"commitizen": {"path": "node_modules/cz-customizable"   //commitizen的自定義配置的安裝位置}
}

3.根目錄下創建.cz-config.js自定義提示文件

module.exports = {//可選類型types: [{ value: 'feat', name: 'feat: 新功能' },{ value: 'fix', name: 'fix: 修復' },{ value: 'docs', name: 'docs: 文檔變更' },{ value: 'style', name: 'style: 代碼格式(不影響代碼運行的變動)' },{ value: 'refactor', name: '重構(即不增加feature,也不修復bug)' },{ value: 'perf', name: 'perf: 性能優化' },{ value: 'test', name: 'test: 增加測試' },{ value: 'chore', name: 'chore: 構建過程或輔助工具的變動' },{ value: 'revert', name: 'revert: 回退' },{ value: 'build', name: 'build: 打包' }],//消息步驟messages: {type: '請選擇提交的類型:',customScope: '請輸入修改范圍(可選)',subject: '請簡要描述提交(必填)',body: '請輸入詳細描述(可選)',footer: '請輸入要關閉的issue(可選)',confirmCommit: '確認要使用以上信息提交? (y/n)'},//跳過問題skipQuestions: ['body', 'footer'],//subject文字默認長度是72subjectLimit: 72
}

4. 使用git cz代替git commit。使用git cz代替git commit即可看到上述提示內容

czh12@czh12deiMac vue-admin % **git add .**
czh12@czh12deiMac vue-admin % **git cz**
cz-cli@4.2.4, cz-customizable@6.3.0All lines except first will be wrapped after 100 characters.
? 請選擇提交的類型: feat: 新功能
? 請輸入修改范圍(可選) git
? 請簡要描述提交(必填) add commitizen
? 請輸入詳細描述(可選) 使用commitizen提交代碼
? 請輸入要關閉的issue(可選) ###--------------------------------------------------------###
feat(git): add commitizen使用commitizen提交代碼
###--------------------------------------------------------###? 確認要使用以上信息提交? (y/n) Yes> running pre-commit hook: lint-staged↓ Stashing changes... [skipped]→ No partially staged files found...? Running tasks...
[master 5904db7] feat(git): add commitizen3 files changed, 512 insertions(+), 7 deletions(-)create mode 100644 .cz-config.js
chenzh12@chenzh12deiMac vue-admin % **git log**
commit 5904db74cd7128e4957dbcdcd45d33033cb4bdca (HEAD -> master)
Author: zhenghuachen <zhchenanhui@163.com>
Date:   Tue Oct 31 18:00:15 2023 +0800feat(git): add commitizen使用commitizen提交代碼

3.2 Git Hooks

????????上節完成了Commitizen提交的配置,但是需要使用git cz替換git commit才能實現,如果不使用git cz上述提交規范就沒有預約效果。本節實現不符合約定式提交規范時,阻止當前提交,并拋出錯誤提示。

????????本節實現的功能需要借助Git hooks,它是是一種在提交代碼之前或之后執行特定操作的技術。本節主要借助一下兩種鉤子:

Git Hooks調用時機說明
pre-commitgit commit執行前他不接受任何參數,并且在獲取提交日志消息并進行提交之前被調用。腳本git commit以非零狀態退出會導致命令在創建提交之前停止。可以使用 git commit —no-verify繞過
commit-msggit commit執行前 、可以用于將消息規范為魔種項目標準格式。還可以用于在檢查消息文件后拒絕提交可以使用 git commit —no-verify繞過

簡單來說:

commit-msg:可以用來貴干化標準格式,并且可以按需指定是否要拒絕本次提交;

pre-commit:會在提交前被調用,并且可以按需指定是否要拒絕本次提交。

使用git hooks校驗提交信息需要使用到如下工具:

commitlint:用于檢查提交信息(https://github.com/conventional-changelog/commitlint)

husky: 是git hooks工具(https://github.com/typicode/husky)

注: 需要保證npm版本是7.X以上

3.2.1 commitlint安裝

1. 安裝依賴

npm install --save-dev @commitlint/config-conventional@12.1.4 @commitlint/cli@12.1.4

2.?創建commitlint.config.js文件。可以直接執行下面代碼

echo "module.exports = {extends: ['@commitlint/config-conventional]'}" >
commitlint.config.js

????????也可以手動新建commitlint.config.js并輸入,表示導出的對象繼承了這個第三方的包

module.exports = {extends: ['@commitlint/config-conventional']
}

3.?打開commitlint.config.js, 增加配置項

module.exports = {// 繼承的規則extends: ['@commitlint/config-conventional'],// 定義規則roles: {// type 的類型定義: 表示git提交的type必須再以下類型范圍'type-enum': [// 當前驗證的錯誤級別,2表示錯誤2,// 在什么情況下進行驗證'always',// 泛型內容['feat', // 'feat: 新功能''fix', // 'fix: 修復''docs', // 'docs: 文檔變更''style', // 'style: 代碼格式(不影響代碼運行的變動)''refactor', // '重構(即不增加feature,也不修復bug)''perf', // 'perf: 性能優化''test', // 'test: 增加測試''chore', // 'chore: 構建過程或輔助工具的變動''revert', // 'revert: 回退''build' // 'build: 打包']],// subject 大小寫不做校驗'subject-case': [0]}
}
3.2.2 husky安裝

1. 安裝依賴:npx husky install

czh12@czh12deiMac vue-admin % npx husky install
husky - Git hooks installed

2.?啟動hooks,生成.husky文件夾:npx husky install

czh12@czh12deiMac vue-admin % npx husky install
husky - Git hooks installed

3.?再package.json中生成prepare指令(需要npm>7.0)

????????可以手動添加,也可以通過如下指令生成

npm set-script prepare "husky install"

4.?執行prepare指令:npm run prepare

czh12@czh12deiMac vue-admin % npm run prepare> vue-admin@0.1.0 prepare
> husky installhusky - Git hooks installed

5.?添加commitlint的hooks到husky中,并指令在commit-msg的hooks下執行npx —no-install commitlint —edit "$1"指令

????????通過husky監聽git hooks,在git hooks的commit-msg的回調的hooks里面執行commitlint來完成對應的提交代碼的檢測

czh12@czh12deiMac vue-admin % npx husky add .husky/commit-msg 'npx --no-installcommitlint --edit "$1"'
husky - created .husky/commit-msg

????????此時的.husky文件結構

????????此時,不符合規范的提交將會被阻止

czh12@czh12deiMac vue-admin % git add .     
czh12@czh12deiMac vue-admin % git commit -m 'test'
?   input: test
?   subject may not be empty [subject-empty]
?   type may not be empty [type-empty]?   found 2 problems, 0 warnings
?   Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlinthusky - commit-msg hook exited with code 1 (error)

????????綜上,代碼強制規范化提交要求以配置完成,不符合提交規范的代碼將無法提交。

3.3 通過pre-commit檢測提交時代碼規范

????????ESLint和Prettier解決了本地代碼格式問題,那么如果本地沒有配置,提交時如何規避這種問題?這就需要使用husky和ESLint配合才可以。通過husky檢測pre-commit鉤子,在該鉤子執行npx eslint —ext .js,.vue src(src目錄下檢測.js和.vue的文件)指令進行相關代碼格式化規范檢測

1. 執行npx husky add .husky/pre-commit "npx eslint —ext .js,.vue src"添加commit時(npx eslint —ext .js,.vue src 會在執行到該hooks是運行)

2. 執行上述命令,會在.husky文件夾中生成pre-commit文件,其內容如下:

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"npx eslint --ext .js,.vue src

3.4 通過lint-staged自動修復格式錯誤

????????上節通過pre-commit處理了檢測代碼提交規范的問題,但是有兩處需要優化。

????????首先,若只修改個別文件,沒必要檢測所有文件的代碼格式;

????????其次,檢測出錯誤依然需要手動修改。

????????lint-staged可以讓代碼檢查值作用域本次修改的代碼,并自動修復并且推送。lint-staged的使用如下,修改package.json中lint-staged的配置為:

"lint-staged": {"src/**/* .(js,vue)": ["eslint --fix","git add"]
},

????????如上配置,會在本地commit前校驗提交代碼是否符合ESLint規范,符合則提交,不符合則嘗試修復,修復成功則提交,失敗則提示。

????????同時還要修改pre-commit中的內容,使其使用lint-staged檢測提交

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"npx lint-staged

????????綜上,git提交規范配置完成。總結一下:

????????代碼格式規范,通過ESLint+Prettier+VSCode配合進行了處理,達到了保存代碼,自動格式化代碼格式的目的。git提交規范使用了husky來檢測Git hooks鉤子,并通過以下插件完成配置:

約定式提交規范

commitizen:git提交規范化工具

commitlint:用于檢測提交信息

pre-commit: git hooks 鉤子

lint-staged:只檢測本次修改更新后的代碼,并將出現的錯誤自動修復并推送。

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

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

相關文章

【算法分析與設計】

&#x1f4dd;個人主頁&#xff1a;五敷有你 &#x1f525;系列專欄&#xff1a;算法分析與設計 ??穩中求進&#xff0c;曬太陽 題目 編寫一個函數&#xff0c;輸入是一個無符號整數&#xff08;以二進制串的形式&#xff09;&#xff0c;返回其二進制表達式中數字位…

如何使用Express框架構建一個簡單的Web應用

在這個數字化時代&#xff0c;Web應用的需求越來越多樣化和復雜化。在前端開發領域&#xff0c;Express框架作為一個快速、靈活的Node.js Web應用程序框架&#xff0c;擁有強大的功能和豐富的生態系統&#xff0c;深受開發者們的青睞。本篇博客將帶您一步步探索如何使用Express…

AUTOSAR汽車電子嵌入式編程精講300篇-基于深度學習的車載總線網絡入侵檢測

目錄 前言 國內外研究現狀 汽車 CAN 網絡攻擊現狀 2 汽車 CAN 總線介紹及信息安全問題分析</

MR混合現實情景實訓教學系統在高空作業課堂中的應用

高空作業是一項高風險的工作&#xff0c;對于從業者來說&#xff0c;不僅需要具備專業的技能&#xff0c;還需要有豐富的實踐經驗。然而&#xff0c;傳統的課堂教學往往只能通過理論講解和模擬訓練來傳授知識&#xff0c;無法提供真實的實踐環境。而MR混合現實情景實訓教學系統…

Alias許可分析中的數據可視化

Alias許可分析中的數據可視化&#xff1a;引領企業洞察合規之道的明燈 在信息化時代&#xff0c;數據可視化已成為各行各業的重要工具&#xff0c;能夠幫助用戶直觀地理解和分析復雜的數據。在Alias許可分析中&#xff0c;數據可視化同樣發揮著至關重要的作用&#xff0c;為企…

【小程序】應用程序編程接口匯總——授權API、OTA API、家庭API

授權API ty.authorize 權限請求方法 需引入BaseKit&#xff0c;且在>1.2.10版本才可使用 參數 Object object 屬性類型默認值必填說明scopestring是scope 權限名稱 舉例子&#xff1a; scope.bluetooth 藍牙權限 scope.writePhotosAlbum 寫入相冊權限 scope.userLocatio…

知乎高贊回復合集,句句道出生活的真相

1. 怎么定義“想清楚了”&#xff1f; “想清楚了”就是以后出了什么問題&#xff0c;你只能找個沒人的地方抽自己&#xff0c;再也不能抱怨別人了。 2. “別讓孩子輸在起跑線上”有道理嗎&#xff1f; 一輩子都要和別人去比較&#xff0c;是人生悲劇的源頭。 3. 太在乎自己…

鴻蒙OS運行報錯 ‘ToDoListItem({ item })‘ does not meet UI component syntax.

在學習harmonyOS時&#xff0c;原本是好好運行的。但是突然報錯 ToDoListItem({ item }) does not meet UI component syntax. 一臉懵逼&#xff0c;以為是自己語法問題檢查了半天也沒問題。 網上搜索了一下&#xff0c;說把多余的js\map文件刪除就行 才發現我的 鴻蒙的開…

Bert基礎(四)--解碼器(上)

1 理解解碼器 假設我們想把英語句子I am good&#xff08;原句&#xff09;翻譯成法語句子Je vais bien&#xff08;目標句&#xff09;。首先&#xff0c;將原句I am good送入編碼器&#xff0c;使編碼器學習原句&#xff0c;并計算特征值。在前文中&#xff0c;我們學習了編…

代碼隨想錄算法訓練營第四十天|343. 整數拆分、96. 不同的二叉搜索樹。

343. 整數拆分 題目鏈接&#xff1a;整數拆分 題目描述&#xff1a; 給定一個正整數 n &#xff0c;將其拆分為 k 個 正整數 的和&#xff08; k > 2 &#xff09;&#xff0c;并使這些整數的乘積最大化。 返回 你可以獲得的最大乘積 。 解題思路&#xff1a; 1、確定dp數組…

flink內存管理,設置思路,oom問題,一文全

flink內存管理 1 內存分配1.1 JVM 進程總內存&#xff08;Total Process Memory&#xff09;1.2 Flink 總內存&#xff08;Total Flink Memory&#xff09;1.3 JVM 堆外內存&#xff08;JVM Off-Heap Memory&#xff09;1.4 JVM 堆內存&#xff08;JVM Heap Memory&#xff09;…

運維的利器–監控–zabbix–第二步:建設–部署zabbix agent

文章目錄 監控客戶端部署及添加主機一、在 zabbix-server 安裝客戶端二、在本機和其他linux主機安裝zabbix agent客戶端1、安裝2、配置3、啟動并開機自啟4、添加主機創建主機組創建主機等一會或重啟zabbix-server查看配置是否成功 三、在其他windows上安裝zabbix agent客戶端下…

主流的開發語言和開發環境介紹

個人淺見&#xff0c;不喜勿噴&#xff0c;謝謝 軟件開發是一個涉及多個方面的復雜過程&#xff0c;其中包括選擇合適的編程語言和開發環境。編程語言是軟件開發的核心&#xff0c;它定義了程序員用來編寫指令的語法和規則。而開發環境則提供了編寫、測試和調試代碼的工具和平臺…

Microsoft的PromptBench可以做啥?

目錄 PromptBench簡介 PromptBench的快速模型性能評估 PromptBench數據集介紹 PromptBench模型介紹 PromptBench模型加載遇到的問題 第一次在M1 Mac上加載模型 vicuna和llama系列模型 PromptBench各個模型加載情況總結 PromptBench的Prompt快速工程 chain of thought…

WebService學習,wsdl文件詳解

目錄 第一章、起因1.1&#xff09;學習原因1.2&#xff09;提問的過程&#xff08;逐步提出問題&#xff09;1、&#xff1f;wsdl鏈接的含義&#xff0c;有什么作用&#xff1f;2、什么是wsdl文檔&#xff1f;3、如何閱讀wsdl文件&#xff1f;4、wsdl文件有什么作用&#xff1f…

基于springboot+vue的智慧社區系統(前后端分離)

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

每周編輯精選|MathPile 數學推理語料庫開源、協和眼科牽頭用 AI 助力 13 種眼底疾病檢測

近日&#xff0c;上海交通大學生成式人工智能研究實驗室 (GAIR)&#xff0c;開源了專為數學領域量身定制的高質量且多樣化的預訓練數據集 MathPile&#xff0c;及其可商用版本 MathPile-Commercial&#xff0c;現在在 hyper.ai 官網可以下載啦&#xff01;還有更多如 MathVista…

(十四)【Jmeter】線程(Threads(Users))之開放模型線程組(Open Model Thread Group)

簡述 操作路徑如下: 開放模型線程組(Open Model Thread Group) 是 JMeter 5.5 版本中引入的一個新特性,它允許用戶創建具有可變負載的負載配置文件。相較于傳統的線程組,開放模型線程組提供了更多的靈活性和動態調整的能力。 優點: 靈活性:允許測試人員根據測試需求動…

python 提取PDF文字

使用pdfplumber&#xff0c;不能提取掃描的pdf和插入的圖片。 import pdfplumberfile_path rD:\UserData\admindesktop\官方文檔\1903_Mesh-Models-Overview_FINAL.pdf with pdfplumber.open(file_path) as pdf:page pdf.pages[0]print(page.extract_text()) # 所以文字prin…

Verilog刷題筆記33

題目&#xff1a; You are given a four-bit input vector in[3:0]. We want to know some relationships between each bit and its neighbour: out_both: Each bit of this output vector should indicate whether both the corresponding input bit and its neighbour to t…