成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

項目中使用Husky 格式化代碼和校驗 Commit 信息

開發 前端
Husky 是一個很有用的工具,能夠利用 Git hook 在本地 Commit 時,配合 eslint 等 Linter 工具做文件的格式化,并配合Commitlint 校驗 commit 信息格式,是工程化統一代碼風格的一大利器。

大家好,我是前端西瓜哥。今天我們學習使用 husky 工具,在 commit 的時候做一些風格的校驗工作,包括 commit 信息格式化和文件格式化。

git hook 和 husky

git hook 讓我們可以在 git 執行一些行為的前后時機,執行一些腳本。

比如 pre-commit? ,能夠在我們真正提交 commit 之前先執行一段代碼,如果這段代碼報錯(exit 1),提交會被取消;如果正常執行,commit 會被真正提交。

或是 commit-msg,也能在真正 commit 前拿到 commit 信息內容,去做一些檢驗工作。

利用 git hook 的能力,我們就可以在 commit 前做一些風格檢驗或格式化,比如 ESLint、Prettier、commit 格式等。

git hook 是 sh 腳本,在項目 .git/hooks 目錄下。這有一個比較尷尬的問題:.git 下的文件是不會被 git 提交的。husky 就是解決這個問題的一個方案。

實際上 git 2.9 之后,我們可以通過配置 git 的 core.hookspath 來指定 hook 目錄為相當項目下的目錄,理論上可以不用 husky。

但 husky 還是算是做了一層封裝,可以更好地操作 hook,比如通過命令行快速生成 hook,并將其設置為可執行。

husky 4 及以前使用的是 .huskyrc 來進行配置。那時候設計上有一些問題,就是沒有配置的 hook 也會觸發鉤子執行。于是在 husky 4 做了破壞性的修改。使用方法變成了在 .husky 目錄下直接加鉤子腳本。

husky 安裝和啟用

不講解 husky 4 及其以前版本的使用,因為已經過時了。

首先是安裝:

yarn add -D husky
# 或用 npm
npm install husky --save-dev

然后執行 husky 命令行工具,啟用 git hook:

npx husky install

該命令會創建一個 .husky 目錄。

.husky
└── _
├── .gitignore
└── husky.sh

同時,該命令還將 git 所在項目本地環境的 core.hookspath? 設置為 .husky?。所以,這個 .husky 目錄就是我們放 git hook 腳本的地方。

我們執行下面命令,可以看到當前 git 項目的本地配置有:core.hookspath=.husky。

git config --local --list

其他同事拉取項目時,他們可能會忘記執行上面的命令啟用 git hook。但有一個命令他們是一定會執行的,就是執行 npm install? 或 yarn 去安裝依賴。

于是我們需要利用 npm script 的生命周期腳本,加上一個 prepare。prepare 會在 install 之后執行。

// package.json
{
"scripts": {
// ...
"prepare": "husky install"
}
}

這樣就能保證新同事拉項目并安裝依賴后,husky 被啟用。

創建 hook

npx husky add .husky/pre-commit "npm test"

該命令會給你在 .husky 下創建一個 pre-commit 腳本,并填充 npm test 內容,這樣我們就能在 commit 前先過一過測試用例。

這個腳本會自動設置為可執行。

如果你是手動創建的,你需要手動使用 chmod u+x pre-commit 命令將該文件設置為可執行文件。否則鉤子腳本是不會執行的。

創建的腳本內容為:

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

npm test

它會在真正 commit 前執行 npm test,如果報錯就會中止 commit。

實戰:使用 commitlint 校驗 commit 信息格式

我們希望在提交 commit 時,能夠檢驗 commit 信息,如果不對就不允許提交。這樣能防止開發人員提交一些雜亂、無法理解或不統一的信息。

這種情況下需要用到 commit-msg 鉤子,我們先創建一個沒有內容的 commit-msg。

npx husky add .husky/commit-msg ""

?在 commit-msg 腳本中,我們可以通過 $1? 拿到提交信息。$1? 指向的是 .git/COMMIT_EDITMSG 文件,該文件保存著最后一次提交的 commit 信息。

可以拿到 commit 信息,那我們就可以在上面做一些校驗工作,比如看是否符合 feat: xxx 的格式。這里有個問題,就是我們需要自己去聲明一些規范,并且要自己去實現代碼。

那,我們去找輪子,輪子找到了,它就是 commitlint。commitlint 是一個命令行工具,能夠做 commit 的校驗,并提供了官方的校驗規則,此外也支持你自己配置規則。

先安裝 commitlint:

yarn add -D @commitlint/cli @commitlint/config-conventional

然后創建 commitlint.config.js? 配置文件,并添加內容,使用 @commitlint/config-conventional 。

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

@commitlint/config-conventional?  是一個經典的 commit 規范,我們需要用類似 feat: add util.js? 或 fix: fix wrong text 這樣的格式,具體文檔見:

https://www.conventionalcommits.org/en/v1.0.0/。

然后我們在 commit-msg 鉤子上加上:

npx --no -- commitlint --edit $1

  • npx --no :表示只使用本地項目 node_modules 下的腳本,不允許找不到的時候嘗試去下載。下載耗費時間,所以要取消,你要確保已經把命令行工具下載好。
  • commitment --edit <文件名>?:執行 commitment 命令行工具,并使用--edit? 選項,從一個文件里提取 commit 內容來進行校驗。校驗規則由前面說的commitlint.config.js 配置文件來指定。

配置后,我們測試下,先提交不規范的 commit:

圖片

加上開頭的 commit 類別 type,再提交,成功了:

圖片

實戰:使用 lint-staged 格式化要暫存區的文件

lint-staged 是一個命令行工具,它能夠對 git 的 staged(暫存區)中的文件使用 linter 工具格式化,修復一些風格問題,并再次添加到 staged 上。

一個經典的搭配是,配合 husky 的 pre-commit 鉤子將文件 格式化后再提交。pre-commit 在真正 commit 前觸發,配合上 lint-staged,就能做一些風格的修正。

使用 lint-staged 強制提交的文件做格式化適用的場景:

  1. 一些團隊成員使用的編輯器沒有或未安裝格式化插件,代碼不能在保存后自動格式化,容易提交風格錯誤的代碼;
  2. 項目開發了一段時間才引入了代碼風格規范,希望一點點修正。如果一次性全部格式化,可能會有不少需要手動修復的風格;

下面我們開始配置。

首先我們安裝 lint-staged:

yarn add -D lint-staged

然后新增 pre-commit 鉤子,內容為 npx lint-staged:

npx husky add .husky/pre-commit "npx lint-staged"

因為提交的文件有多種類型,比如 js、md、less、mdx 等。所以我們還需要配置一下,針對不同類型文件使用不同的 linter。

lint-commit 的配置可以放到 package.json,也可以放到專門的配置文件里。我選擇后者,在項目根目錄創建一個 .lintstagedrc.js 文件,然后加上以下內容:

module.exports = {
"src/**/*.{js,jsx,ts,tsx}": "eslint --fix",
};

這里表示指定在 src 目錄下 js、jsx、ts、tsx 后綴文件,使用 eslint 做格式化。我只使用 eslint 做 js 和 ts 的格式化,其他的就不管了,你可以考慮用過 prettier 格式化它們。

這里有一個 Github 可以參考,地址為:

https://github.com/F-star/xigua-ui。

結尾

husky 是一個很有用的工具,能夠利用 git hook 在本地 commit 時,配合 eslint 等 linter 工具做文件的格式化,并配合 commitlint 校驗 commit 信息格式,是工程化統一代碼風格的一大利器。

責任編輯:姜華 來源: 前端西瓜哥
相關推薦

2011-09-13 18:09:15

Eclipse And

2010-08-03 10:46:41

Flex代碼格式化

2011-03-07 15:01:42

MySQLXML數據

2009-06-24 17:34:58

使用JSF的經驗

2010-07-29 11:03:53

Flex代碼格式化

2015-01-07 15:21:30

Android Stu代碼格式化

2023-11-30 09:00:00

TypeScript開發

2022-05-17 07:54:40

代碼前端格式化

2019-05-17 13:20:57

Black格式化工具Python

2017-07-04 19:02:17

ReacRedux 項目

2010-08-10 13:35:26

Flex代碼格式化

2020-09-02 07:19:41

printf 格式化輸出Unix

2009-06-05 15:27:23

Eclipse工具格式化模板應用

2021-04-14 07:35:12

Json格式化日期

2009-09-04 13:19:59

C#代碼格式化

2022-03-10 10:24:45

Vim代碼Linux

2018-05-02 09:18:17

Linux技巧嵌入式

2021-08-23 10:40:30

人工智能KubernetesAI

2020-11-03 10:21:33

MySQL

2022-06-26 08:39:19

Spring容器字段格式化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区二区久久久久 | 另类专区成人 | 国产欧美日韩在线一区 | 日韩在线观看视频一区 | 国产91成人 | 欧美精品综合 | 日韩在线视频一区 | 中文字幕一区在线观看视频 | 日韩在线免费 | 伊人久久精品一区二区三区 | 欧洲亚洲一区 | 黄视频在线网站 | av中文字幕在线观看 | 永久精品| 夜夜爽99久久国产综合精品女不卡 | 在线观看中文字幕亚洲 | av黄色免费在线观看 | 五月网婷婷 | 天天干天天谢 | 婷婷色婷婷 | 欧美一区二区黄 | 日韩成人免费av | 日韩精品人成在线播放 | 欧美理伦片在线播放 | 亚洲va欧美va天堂v国产综合 | 一区二区久久精品 | 国产一区二区三区 | 99精品国产在热久久 | 国产成人精品综合 | 久久久天天 | 久久精品无码一区二区三区 | 日韩欧美视频免费在线观看 | 久久精品国产99国产精品 | 日韩网站在线观看 | 91久久久久 | 久久国产精品色av免费观看 | 欧美成年网站 | 国产精品资源在线 | 午夜精品91 | 在线观看国产wwwa级羞羞视频 | 久久久2o19精品 |