【vue3-element-admin】Husky + Lint-staged + Commitlint + Commitizen + cz-git 配置 Git 提交規範

来源:https://www.cnblogs.com/haoxianrui/archive/2023/04/17/17325798.html
-Advertisement-
Play Games

整合 Husky + Lint-staged + Commitlint + Commitizen + cz-git 並配置的 pre-commit 和 commit-msg 兩個鉤子分別實現 Git 提交前代碼檢測和 Git 提交信息規範。 ...


前言

本文介紹 vue3-element-admin 如何通過 Husky + Lint-staged + Commitlint + Commitizen + cz-git 來配置 Git 提交代碼規範。

核心內容是配置 Husky 的 pre-commitcommit-msg 兩個鉤子:

pre-commit:Husky + Lint-staged 整合實現 Git 提交前代碼規範檢測/格式化 (前提:ESlint + Prettier + Stylelint 代碼統一規範);

commit-msg: Husky + Commitlint + Commitizen + cz-git 整合實現生成規範化且高度自定義的 Git commit message。

Husky

Husky 是 Git 鉤子工具,可以設置在 git 各個階段(pre-commitcommit-msg 等)觸發。

官方網站:https://typicode.github.io/husky

Husky 安裝有 自動安裝手動安裝 兩種方式 。

官方推薦自動安裝的方式,使用 husky-init 命令一次性完成依賴自動安裝和配置

npx husky-init && npm install

自動生成的 .husky 目錄和指令:

Lint-staged

lint-staged 是一個在 git add 到暫存區的文件運行 linters (ESLint/Prettier/StyleLint) 的工具,避免在 git commit 提交時在整個項目執行。

官方網站:https://github.com/okonet/lint-staged

Lint-staged 安裝

npm install -D lint-staged

Lint-staged 配置

檢測/格式化配置

package.json 中添加不同文件在 git 提交執行的 lint 檢測配置

"lint-staged": {
    "*.{js,ts}": [
      "eslint --fix",
      "prettier --write"
    ],
    "*.{cjs,json}": [
      "prettier --write"
    ],
    "*.{vue,html}": [
      "eslint --fix",
      "prettier --write",
      "stylelint --fix"
    ],
    "*.{scss,css}": [
      "stylelint --fix",
      "prettier --write"
    ],
    "*.md": [
      "prettier --write"
    ]
  }

添加 lint-staged 指令

package.json 的 scripts 添加 lint-staged 指令

  "scripts": {
    "lint:lint-staged": "lint-staged"
  }

修改提交前鉤子命令

根目錄 .husky 目錄下 pre-commit 文件中的 npm test 修改為 npm run lint:lint-staged

#npm test
npm run lint:lint-staged

Git 提交代碼檢測

Commitlint

Commitlint 檢查您的提交消息是否符合 Conventional commit format。-- Commitlint 官網

Commitlint 安裝

參考 官方安裝文檔

npm install -D @commitlint/cli @commitlint/config-conventional

Commitlint 配置

根目錄創建 commitlint.config.cjs 配置文件,示例配置: @commitlint/config-conventional

module.exports = {
  // 繼承的規則
  extends: ["@commitlint/config-conventional"],
  // @see: https://commitlint.js.org/#/reference-rules
  rules: {
    "subject-case": [0], // subject大小寫不做校驗

    // 類型枚舉,git提交type必須是以下類型
    "type-enum": [
      2,
      "always",
      [
    'feat', // 新增功能
        'fix', // 修複缺陷
        'docs', // 文檔變更
        'style', // 代碼格式(不影響功能,例如空格、分號等格式修正)
        'refactor', // 代碼重構(不包括 bug 修複、功能新增)
        'perf', // 性能優化
        'test', // 添加疏漏測試或已有測試改動
        'build', // 構建流程、外部依賴變更(如升級 npm 包、修改 webpack 配置等)
        'ci', // 修改 CI 配置、腳本
        'revert', // 回滾 commit
        'chore', // 對構建過程或輔助工具和庫的更改(不影響源文件、測試用例)
      ],
    ],
  },
};

添加提交信息校驗鉤子

執行下麵命令生成 commint-msg 鉤子用於 git 提交信息校驗,命令來自:@commitlint/README.md

npx husky add .husky/commit-msg "npx --no -- commitlint --edit $1"

生成的配置如下:

Commitlint 驗證

正確的提交格式:<type>(<scope>): <subject> ,type 和 subject 預設必填

不規範的 commit msg,提交失敗 規範的 commit msg,提交成功

Commitizen & cz-git

  • commitizen: 基於Node.js的 git commit 命令行工具,輔助生成標準化規範化的 commit message。--官方文檔
  • cz-git: 一款工程性更強,輕量級,高度自定義,標準輸出格式的 commitizen 適配器。--官方文檔

Commitizen & cz-git 安裝

npm install -D commitizen cz-git

cz-git 配置

修改 package.json 指定使用的適配器

 "config": {
    "commitizen": {
      "path": "node_modules/cz-git"
    }
  }

cz-git 與 commitlint 進行聯動給予校驗信息,所以可以編寫於 commitlint 配置文件之中(⇒ 配置模板)。

// commitlint.config.cjs
module.exports = {
  rule: {
    ...
  },
  prompt: {
  messages: {
      type: '選擇你要提交的類型 :',
      scope: '選擇一個提交範圍(可選):',
      customScope: '請輸入自定義的提交範圍 :',
      subject: '填寫簡短精煉的變更描述 :\n',
      body: '填寫更加詳細的變更描述(可選)。使用 "|" 換行 :\n',
      breaking: '列舉非相容性重大的變更(可選)。使用 "|" 換行 :\n',
      footerPrefixesSelect: '選擇關聯issue首碼(可選):',
      customFooterPrefix: '輸入自定義issue首碼 :',
      footer: '列舉關聯issue (可選) 例如: #31, #I3244 :\n',
      generatingByAI: '正在通過 AI 生成你的提交簡短描述...',
      generatedSelectByAI: '選擇一個 AI 生成的簡短描述:',
      confirmCommit: '是否提交或修改commit ?',
    },
    // prettier-ignore
    types: [
      { value: "feat",     name: "特性:     ✨  新增功能", emoji: ":sparkles:" },
      { value: "fix",      name: "修複:     

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 作者: 奧特曼愛小怪獸 文章來源:GreatSQL社區投稿 上一篇 MySQL8.0 優化器介紹(一)介紹了成本優化模型的三要素:表關聯順序,與每張表返 ...
  • 一、資料庫類型 關係資料庫管理系統(RDBMS) 非關係資料庫管理系統(NoSQL) 按照預先設置的組織機構,將數據存儲在物理介質上(即:硬碟上) 數據之間可以做無關聯操作 (例如: 多表查詢,嵌套查詢,外鍵等) 主流的RDBMS軟體:MySQL、MariaDB、Oracle、DB2、SQL Ser ...
  • TiDB作為NewSQL,其在對MySQL(SQL92協議)的相容上做了很多,MySQL作為當下使用較廣的事務型資料庫,在IT界尤其是互聯網間使用廣泛,那麼對於開發人員來說,1)兩個資料庫產品在SQL開發及調優的過程中,都有哪些差異?在系統遷移前需要提前做哪些準備? 2)TiDB的執行計劃如何查看,... ...
  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 作者: Yejinrong/葉金榮 文章來源:GreatSQL社區投稿 啟用coredump 製造一個coredump場景 真實故障場景分析跟蹤 上一篇 ...
  • 背景 如今很多網站都引入截圖功能,可用於問題反饋、內容分享等實用需求,而前端截圖也不知不覺成為了首選。今天為大家推薦兩種前端截圖方式,雖然有些局限,但是也能應付大部分項目需求。 Canvas截圖:html2canvas SVG截圖:rasterizehtml 原理 首先來談下兩種前端截圖方式的原理, ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 隔行換色(%): window.onload = function() { var aLi = document.getElementsByTagName('li'); for(var i = 0; i < aLi.length; i++ ...
  • 在 Vue 3 中,watchEffect 是一個用於監聽響應式數據變化的 API。它可以在函數內部自動跟蹤數據的依賴,併在依賴變化時重新運行函數。 watchEffect 的作用以及各個參數的功能講解: watchEffect(effect: (onInvalidate: InvalidateCb ...
  • 入職多年,面對生產環境,儘管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背後,都是寶貴的經驗和教訓,都是項目成員的血淚史。為了更好地防範和遏制今後的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...