<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          編碼規(guī)范,代碼提交規(guī)范全家桶之husky+lint-staged+commitlint

          共 4763字,需瀏覽 10分鐘

           ·

          2021-09-03 23:34

          作者:透明技術(shù)人員
          來(lái)源:SegmentFault 思否社區(qū)

          背書(shū)簡(jiǎn)介

          husky,是一個(gè)為 git 客戶端增加 hook 的工具。安裝后,它會(huì)自動(dòng)在倉(cāng)庫(kù)中的 .git/ 目錄下增加相應(yīng)的鉤子;比如 pre-commit 鉤子就會(huì)在你執(zhí)行 git commit 的觸發(fā)。我們可以在 pre-commit 中實(shí)現(xiàn)一些比如 lint 檢查、單元測(cè)試、代碼美化等操作。當(dāng)然,pre-commit 階段執(zhí)行的命令當(dāng)然要保證其速度不要太慢,每次 commit 等很久體驗(yàn)不好。
          lint-staged,一個(gè)僅僅過(guò)濾出 Git 代碼暫存區(qū)文件(被 git add 的文件)的工具;這個(gè)很實(shí)用,因?yàn)槲覀內(nèi)绻麑?duì)整個(gè)項(xiàng)目的代碼做一個(gè)檢查,可能耗時(shí)很長(zhǎng),如果是老項(xiàng)目,要對(duì)之前的代碼做一個(gè)代碼規(guī)范檢查并修改的話,這可能就麻煩了,可能導(dǎo)致項(xiàng)目改動(dòng)很大。所以這個(gè) lint-staged,對(duì)團(tuán)隊(duì)項(xiàng)目和開(kāi)源項(xiàng)目來(lái)說(shuō),是一個(gè)很好的工具,它是對(duì)個(gè)人要提交的代碼的一個(gè)規(guī)范和約束。

          新版husky的工作原理

          新版的husky從git 2.9開(kāi)始引入一個(gè)新功能core.hooksPath,core.hooksPath可以讓你指定git hooks所在的目錄而不是使用默認(rèn)的.git/hooks/,這樣husky可以使用husky install將git hooks的目錄指定為.husky/,然后使用husky add命令向.husky/中添加hook。通過(guò)這種方式我們就可以只添加我們需要的git hook,而且所有的腳本都保存在了一個(gè)地方(.husky/目錄下)因此也就不存在同步文件的問(wèn)題了。

          新版husky + lint-staged實(shí)踐

          1.安裝husky

          npm i husky --save-dev

          2. 在package.json 中添加 prepare 腳本

          {
            "scripts": {
              "prepare""husky install"
            }
          }

          3. 執(zhí)行prepare腳本

          npm run prepare
          • 執(zhí)行 husky install命令,該命令會(huì)創(chuàng)建.husky/目錄并指定該目錄為git hooks所在的目錄。

          4. 添加git hooks,運(yùn)行一下命令創(chuàng)建git hooks

          npx husky add .husky/pre-commit "npm run lint"
          • 運(yùn)行完該命令后我們會(huì)看到.husky/目錄下新增了一個(gè)名為pre-commit的shell腳本。也就是說(shuō)在在執(zhí)行g(shù)it commit命令時(shí)會(huì)先執(zhí)行pre-commit這個(gè)腳本。pre-commit腳本內(nèi)容如下:


          #!/bin/sh
          "$(dirname "$0")/_/husky.sh"
           
          npm run lint

          • 該腳本的功能就是執(zhí)行npm run lint這個(gè)命令

          5. 添加commit-msg腳本

          npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
          • commit-msg腳本內(nèi)容如下:


          #!/bin/sh

          "$(dirname "$0")/_/husky.sh"

          npx --no-install commitlint --edit "$1"

          6. 安裝lint-staged

          npm i lint-staged --save-dev

          7. 在 package.json 文件中配置 lint  的命令

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

          8. 在 package.json 或者在根目錄中創(chuàng)建.lintstagedrc或者lint-staged.config.js或者 lint-staged.config.js文件中配置 lint  的命令

          • 從 v3.1 開(kāi)始,您現(xiàn)在可以使用不同的方式進(jìn)行 lint-staged 配置:

          • lint-staged 在你的對(duì)象 package.json

          • .lintstagedrc JSON或YML格式的文件

          • lint-staged.config.js JS格式的文件

          • 使用 --config 或 -c 標(biāo)志傳遞配置文件


          1、例子:在package.json文件中配置

          "lint-staged": {
            "src/**/*.{js.vue}": ["prettier --write","esslint --cache --fix","git add"]
          }

          2、例子:在lint-staged.config.js文件中配置

          "use strict";
          module.exports = {
            ignore: ["package-lock.json""CHANGELOG.md"],
            linters: {
                "*.ts": ["prettier --write""eslint --fix""git add"],
                "*.js": ["prettier --write""eslint --cache --fix""git add"],
                "*.vue": ["prettier --write""eslint --cache --fix""git add"],
                "*.{json,md,yml,css}": ["prettier --write""git add"]
          }

          在 commit 之前,將暫存區(qū)的內(nèi)容做一次 代碼檢查 和 代碼美化,然后再添加到暫存區(qū);然后再 commit

          9.定制提交規(guī)范

          1、安裝
          npm install --save-dev @commitlint/config-conventional @commitlint/cli

          // 生成配置文件commitlint.config.js,當(dāng)然也可以是 .commitlintrc.js
          echo "module.exports = {extends: ['@commitlint/config-conventional']};" > commitlint.config.js

          2、定制提交格式
          <type>: <subject>

          3、常用的type類別
          • upd:更新某功能(不是 feat, 不是 fix)

          • feat:新功能(feature)

          • fix:修補(bǔ)bug

          • docs:文檔(documentation)

          • style:格式(不影響代碼運(yùn)行的變動(dòng))

          • refactor:重構(gòu)(即不是新增功能,也不是修改bug的代碼變動(dòng))

          • test:增加測(cè)試

          • chore:構(gòu)建過(guò)程或輔助工具的變動(dòng)


          例子:
          git commit -m 'feat: 增加 xxx 功能'
          git commit -m 'bug: 修復(fù) xxx 功能'

          4、commitlint.config.js文件配置

          rule由name和配置數(shù)組組成,如:'name:[0, 'always', 72]',數(shù)組中第一位為level,可選0,1,2,0為disable,1為warning,2為error,第二位為應(yīng)用與否,可選always|never,第三位該rule的值。具體配置例子如下:
          module.exports = {
            extends: [
              "@commitlint/config-conventional"
            ],
            rules: {
              'type-enum': [2, 'always', [
                'upd''feat''fix''refactor''docs''chore''style''revert'
               ]],
              'type-case': [0],
              'type-empty': [0],
              'scope-empty': [0],
              'scope-case': [0],
              'subject-full-stop': [0, 'never'],
              'subject-case': [0, 'never'],
              'header-max-length': [0, 'always', 72]
            }
          };

          10. 安裝eslint和prettier相關(guān)代碼格式化和校驗(yàn)插件,項(xiàng)目根目錄下面配置eslint和prettier規(guī)則,然后就可以在git提交代碼的時(shí)候進(jìn)行代碼校驗(yàn)了。

          • 例子:正確的提交



          • 例子 :錯(cuò)誤的提交





          點(diǎn)擊左下角閱讀原文,到 SegmentFault 思否社區(qū) 和文章作者展開(kāi)更多互動(dòng)和交流,掃描下方”二維碼“或在“公眾號(hào)后臺(tái)回復(fù)“ 入群 ”即可加入我們的技術(shù)交流群,收獲更多的技術(shù)文章~

          - END -


          瀏覽 100
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91成人电影a | 国产免费AAA | 五月天婷婷色 | 国产女人操逼打咆视频 | a 在线免费观看 |