精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

項(xiàng)目中使用Husky 格式化代碼和校驗(yàn) Commit 信息

開發(fā) 前端
Husky 是一個(gè)很有用的工具,能夠利用 Git hook 在本地 Commit 時(shí),配合 eslint 等 Linter 工具做文件的格式化,并配合Commitlint 校驗(yàn) commit 信息格式,是工程化統(tǒng)一代碼風(fēng)格的一大利器。

大家好,我是前端西瓜哥。今天我們學(xué)習(xí)使用 husky 工具,在 commit 的時(shí)候做一些風(fēng)格的校驗(yàn)工作,包括 commit 信息格式化和文件格式化。

git hook 和 husky

git hook 讓我們可以在 git 執(zhí)行一些行為的前后時(shí)機(jī),執(zhí)行一些腳本。

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

或是 commit-msg,也能在真正 commit 前拿到 commit 信息內(nèi)容,去做一些檢驗(yàn)工作。

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

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

實(shí)際上 git 2.9 之后,我們可以通過配置 git 的 core.hookspath 來(lái)指定 hook 目錄為相當(dāng)項(xiàng)目下的目錄,理論上可以不用 husky。

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

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

husky 安裝和啟用

不講解 husky 4 及其以前版本的使用,因?yàn)橐呀?jīng)過時(shí)了。

首先是安裝:

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

然后執(zhí)行 husky 命令行工具,啟用 git hook:

npx husky install

該命令會(huì)創(chuàng)建一個(gè) .husky 目錄。

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

同時(shí),該命令還將 git 所在項(xiàng)目本地環(huán)境的 core.hookspath? 設(shè)置為 .husky?。所以,這個(gè) .husky 目錄就是我們放 git hook 腳本的地方。

我們執(zhí)行下面命令,可以看到當(dāng)前 git 項(xiàng)目的本地配置有:core.hookspath=.husky。

git config --local --list

其他同事拉取項(xiàng)目時(shí),他們可能會(huì)忘記執(zhí)行上面的命令啟用 git hook。但有一個(gè)命令他們是一定會(huì)執(zhí)行的,就是執(zhí)行 npm install? 或 yarn 去安裝依賴。

于是我們需要利用 npm script 的生命周期腳本,加上一個(gè) prepare。prepare 會(huì)在 install 之后執(zhí)行。

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

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

創(chuàng)建 hook

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

該命令會(huì)給你在 .husky 下創(chuàng)建一個(gè) pre-commit 腳本,并填充 npm test 內(nèi)容,這樣我們就能在 commit 前先過一過測(cè)試用例。

這個(gè)腳本會(huì)自動(dòng)設(shè)置為可執(zhí)行。

如果你是手動(dòng)創(chuàng)建的,你需要手動(dòng)使用 chmod u+x pre-commit 命令將該文件設(shè)置為可執(zhí)行文件。否則鉤子腳本是不會(huì)執(zhí)行的。

創(chuàng)建的腳本內(nèi)容為:

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

npm test

它會(huì)在真正 commit 前執(zhí)行 npm test,如果報(bào)錯(cuò)就會(huì)中止 commit。

實(shí)戰(zhàn):使用 commitlint 校驗(yàn) commit 信息格式

我們希望在提交 commit 時(shí),能夠檢驗(yàn) commit 信息,如果不對(duì)就不允許提交。這樣能防止開發(fā)人員提交一些雜亂、無(wú)法理解或不統(tǒng)一的信息。

這種情況下需要用到 commit-msg 鉤子,我們先創(chuàng)建一個(gè)沒有內(nèi)容的 commit-msg。

npx husky add .husky/commit-msg ""

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

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

那,我們?nèi)フ逸喿樱喿诱业搅耍褪?commitlint。commitlint 是一個(gè)命令行工具,能夠做 commit 的校驗(yàn),并提供了官方的校驗(yàn)規(guī)則,此外也支持你自己配置規(guī)則。

先安裝 commitlint:

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

然后創(chuàng)建 commitlint.config.js? 配置文件,并添加內(nèi)容,使用 @commitlint/config-conventional 。

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

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

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

然后我們?cè)?commit-msg 鉤子上加上:

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

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

配置后,我們測(cè)試下,先提交不規(guī)范的 commit:

圖片

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

圖片

實(shí)戰(zhàn):使用 lint-staged 格式化要暫存區(qū)的文件

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

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

使用 lint-staged 強(qiáng)制提交的文件做格式化適用的場(chǎng)景:

  1. 一些團(tuán)隊(duì)成員使用的編輯器沒有或未安裝格式化插件,代碼不能在保存后自動(dòng)格式化,容易提交風(fēng)格錯(cuò)誤的代碼;
  2. 項(xiàng)目開發(fā)了一段時(shí)間才引入了代碼風(fēng)格規(guī)范,希望一點(diǎn)點(diǎn)修正。如果一次性全部格式化,可能會(huì)有不少需要手動(dòng)修復(fù)的風(fēng)格;

下面我們開始配置。

首先我們安裝 lint-staged:

yarn add -D lint-staged

然后新增 pre-commit 鉤子,內(nèi)容為 npx lint-staged:

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

因?yàn)樘峤坏奈募卸喾N類型,比如 js、md、less、mdx 等。所以我們還需要配置一下,針對(duì)不同類型文件使用不同的 linter。

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

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

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

這里有一個(gè) Github 可以參考,地址為:

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

結(jié)尾

husky 是一個(gè)很有用的工具,能夠利用 git hook 在本地 commit 時(shí),配合 eslint 等 linter 工具做文件的格式化,并配合 commitlint 校驗(yàn) commit 信息格式,是工程化統(tǒng)一代碼風(fēng)格的一大利器。

責(zé)任編輯:姜華 來(lái)源: 前端西瓜哥
相關(guān)推薦

2011-09-13 18:09:15

Eclipse And

2010-08-03 10:46:41

Flex代碼格式化

2011-03-07 15:01:42

MySQLXML數(shù)據(jù)

2009-06-24 17:34:58

使用JSF的經(jīng)驗(yàn)

2010-07-29 11:03:53

Flex代碼格式化

2015-01-07 15:21:30

Android Stu代碼格式化

2023-11-30 09:00:00

TypeScript開發(fā)

2022-05-17 07:54:40

代碼前端格式化

2019-05-17 13:20:57

Black格式化工具Python

2017-07-04 19:02:17

ReacRedux 項(xiàng)目

2010-08-10 13:35:26

Flex代碼格式化

2020-09-02 07:19:41

printf 格式化輸出Unix

2009-06-05 15:27:23

Eclipse工具格式化模板應(yīng)用

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容器字段格式化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚州视频一区二区三区| 九九免费精品视频| 在线观看亚洲精品福利片| 亚洲欧美在线视频| 99久久久久国产精品免费| 免费毛片一区二区三区| 精品在线91| 欧美一区二区不卡视频| 玩弄中年熟妇正在播放| 91社区在线观看播放| 国产精品影视天天线| 97在线视频一区| 国产又粗又黄又猛| 成人av地址| 欧美图片一区二区三区| 中文精品无码中文字幕无码专区 | 久久精品视频观看| 高清成人在线观看| 国产精品女主播| 国产午夜福利片| 爽成人777777婷婷| 亚洲精品久久久一区二区三区| 亚洲色图 在线视频| 欧美伦理免费在线| 国产精品初高中害羞小美女文| 国产伦精品一区二区三区| 最近中文字幕在线观看| 亚洲国产激情| 久久手机精品视频| a级在线免费观看| 极品国产人妖chinesets亚洲人妖| 欧美在线三级电影| 国产淫片免费看| 三级网站视频在在线播放| 国产日韩欧美在线一区| 精品一区二区日本| 丰满少妇在线观看bd| 老色鬼精品视频在线观看播放| 91极品视频在线| 久久精品第一页| 欧美gay男男猛男无套| 亚洲欧美三级伦理| 毛片网站免费观看| 国产精品对白| 日韩美女视频在线| 毛毛毛毛毛毛毛片123| 日韩美香港a一级毛片| 欧美专区在线观看一区| 三级4级全黄60分钟| 鲁鲁在线中文| 欧美日韩激情视频8区| 国产特级淫片高清视频| wwwww亚洲| 午夜久久久久久| 国产欧美日韩小视频| 日本动漫理论片在线观看网站| 亚洲免费三区一区二区| 三年中国中文在线观看免费播放| 777电影在线观看| 国产精品三级久久久久三级| 日韩欧美亚洲在线| 在线观看免费版| 国产精品久久久久一区二区三区共| 日韩偷拍一区二区| 3p在线观看| 中文字幕一区二区三区在线播放| 亚欧精品在线| 成人一区二区不卡免费| 欧美国产一区二区在线观看| 国产精品久久久久免费| 韩国av永久免费| 成人动漫av在线| 国产一区喷水| 亚洲 国产 欧美 日韩| av一区二区三区四区| 精品欧美一区二区久久久伦| 天堂在线视频免费| 91麻豆国产福利在线观看| 国产青春久久久国产毛片| 女人18毛片水真多18精品| 国产91在线看| 激情久久av| 欧美日韩影视| 久久精品亚洲精品国产欧美kt∨| 欧美久久在线| 91大神xh98hx在线播放| 国产精品久久久久一区| 咪咪色在线视频| 四虎影院观看视频在线观看 | 黄色网页网址在线免费| 亚洲人一二三区| 国产 欧美 日韩 一区| 理论片午夜视频在线观看| 欧美色视频日本高清在线观看| 国产精品沙发午睡系列| 四虎4545www精品视频| 欧美日韩国产一区二区三区地区| 久久久久久久久久久久久久久国产| 亚洲色图综合| 亚洲成人久久网| a级在线免费观看| 五月天久久777| 久热在线中文字幕色999舞| 欧美三级小视频| 最新国产乱人伦偷精品免费网站| 26uuu另类亚洲欧美日本一 | 欧美午夜在线一二页| 手机免费看av网站| 成人h动漫精品一区二区器材| 日韩精品在线免费观看视频| 亚洲无人区码一码二码三码的含义| 欧美成免费一区二区视频| 欧美黑人xxxx| 波多野结衣一区二区三区在线 | 国产精品人人妻人人爽人人牛| 久久不卡日韩美女| 精品国产一区二区三区av性色| 巨胸大乳www视频免费观看| 欧美第一精品| 欧美激情视频给我| 91麻豆一区二区| 91麻豆免费看片| 中文字幕av导航| 正在播放日韩精品| 欧美乱熟臀69xxxxxx| 香港三日本8a三级少妇三级99| 国产精品免费大片| 欧美国产日产韩国视频| 一级一级黄色片| 成人少妇影院yyyy| 超碰免费在线公开| 狠狠久久综合| 亚洲跨种族黑人xxx| 中文字幕人妻一区二| 男女av一区三区二区色多| 91亚洲午夜在线| av影片在线看| 欧美午夜电影在线| 亚洲成人精品在线播放| 色135综合网| 日本久久久a级免费| 亚洲国产精品一| 亚洲欧美激情视频在线观看一区二区三区| 国产黄页在线观看| 日韩欧美中文字幕在线视频| 亚洲天堂影视av| 日本高清www免费视频| 国产精品1区2区3区| 日韩精品极品视频在线观看免费| av电影在线免费| 日韩精品中文字幕一区| 校园春色 亚洲| 国产一区二三区| 亚洲欧美成人一区| 国产综合色区在线观看| 精品偷拍一区二区三区在线看| 国产精品变态另类虐交| 国产福利91精品| 欧美爱爱视频网站| 国模一区二区| 日韩视频免费在线观看| 中文字幕乱码人妻二区三区| 国产三级精品视频| 欧美一级黄色片视频| 日韩成人一级| 91精品国产91久久久久久不卡 | 秋霞电影一区二区| 欧美精品一区二区三区四区五区| 国产一二在线播放| 亚洲成人网av| 久久草视频在线| 91一区二区在线| 精品久久久久av| 欧美伦理在线视频| 日韩女优在线播放| 天堂中文а√在线| 制服.丝袜.亚洲.另类.中文| 国产又粗又硬又长又爽| 国产在线精品一区二区| mm131午夜| 亚洲三区欧美一区国产二区| 欧美日韩成人在线播放| 五月天婷婷视频| 色哟哟国产精品免费观看| 国产高清一区二区三区四区| 噜噜爱69成人精品| 少妇免费毛片久久久久久久久| 91在线成人| 久久伊人91精品综合网站| 中文字幕在线播放av| 亚洲午夜精品在线| 一区二区三区四区免费| 久久精品国产99久久6| 中文字幕免费高| 亚洲国产欧美国产第一区| 久久免费国产精品1| 可以在线观看的av网站| 日韩一区二区三区电影| 国产大片中文字幕在线观看| 91在线精品秘密一区二区| 国产a级片免费观看| 亚洲欧洲日韩| 久久99精品久久久久久秒播放器| 99re久久| 色综合色综合久久综合频道88| 岛国在线视频| 日韩欧美一区二区视频| 久久久久久少妇| 亚洲视频 欧洲视频| 88av在线播放| 青青青伊人色综合久久| 亚洲中文字幕无码一区二区三区 | 91在线播放网站| 欧美videofree性高清杂交| 国产精品黄色大片| 亚洲同性gay激情无套| 亚洲一级av无码毛片精品| 免费看欧美女人艹b| av在线免费观看国产| 欧州一区二区| 国产99在线免费| 亚洲电影有码| 2019最新中文字幕| 日本三级在线播放完整版| 亚洲欧美日韩区| 亚洲国产精品久久久久久6q| 欧美日韩一区二区在线观看视频| 亚洲国产精品午夜在线观看| 国产精品免费视频网站| 人妻av一区二区| 国产麻豆成人传媒免费观看| 久久久久国产一区| 久久欧美肥婆一二区| av一区二区三区免费观看| 色小子综合网| 日韩欧美亚洲日产国产| 亚欧日韩另类中文欧美| 99c视频在线| 91成人福利社区| 国产精品久久色| 亚洲私拍视频| 隔壁老王国产在线精品| 麻豆传媒免费在线观看| 在线电影av不卡网址| 欧洲亚洲在线| 亚洲色图激情小说| 日本韩国一区| 日韩av在线网| 午夜视频免费在线| 精品国产1区二区| 91在线视频国产| 欧美一级国产精品| 国产精品久久久久久久久毛片| 色天使色偷偷av一区二区| 亚洲精品午夜国产va久久成人| 亚洲综合一二三区| 可以直接看的黄色网址| 久久久久国产精品麻豆| 国产精品国产三级国产专业不| 久久亚洲捆绑美女| 97人妻天天摸天天爽天天| 91在线视频观看| 久久亚洲AV成人无码国产野外| 成人国产精品免费观看| 中文字幕在线播放一区二区| 国产精品一色哟哟哟| 天天综合成人网| 国产酒店精品激情| 欧美性猛交乱大交| 丁香网亚洲国际| 91超薄肉色丝袜交足高跟凉鞋| 国产成a人亚洲| 91九色蝌蚪porny| 91免费看片在线观看| 国产精品无码网站| 久久久久99精品一区| 欧美图片自拍偷拍| 国产福利精品一区二区| 亚洲自拍偷拍精品| ww久久中文字幕| 中文字幕成人动漫| 国产精品视频一二三区| 一级性生活免费视频| 亚洲精品高清在线| 日韩欧美亚洲视频| 欧美视频精品一区| 99re热视频| 日韩西西人体444www| 久久精品国产亚洲a∨麻豆| 亚洲午夜性刺激影院| 麻豆电影在线播放| 欧美黑人巨大xxx极品| 亚洲天堂av影院| 国产精品专区一| 国产电影一区| 日韩av一区二区三区在线| 天堂美国久久| 日本欧美视频在线观看| 老**午夜毛片一区二区三区| 天天碰免费视频| 国产精品一区免费在线观看| 欧美激情一区二区三区p站| 国产日韩精品一区二区浪潮av| 色婷婷粉嫩av| 婷婷久久综合九色国产成人 | 2018日韩中文字幕| 在线日韩三级| 欧美二区在线| 一区二区蜜桃| 国产精品wwwww| 成人午夜激情视频| 青娱乐国产视频| 亚洲午夜久久久久中文字幕久| 成人一级免费视频| 精品久久国产97色综合| 欧洲综合视频| 久久久噜噜噜久久中文字免| 亚洲成人av观看| 国产精品久久久久av福利动漫| 成人免费在线播放| 国产一二三四区在线观看| 日本亚洲免费观看| 香港三日本8a三级少妇三级99| 中文字幕中文字幕一区| 国偷自拍第113页| 91麻豆精品国产91久久久| 欧洲伦理片一区 二区 三区| 九九久久久久久久久激情| 精品123区| 久久精品日产第一区二区三区乱码 | 九色在线视频观看| 国产精品一区久久久久| 日本 欧美 国产| 色欧美日韩亚洲| 欧美一级特黄aaaaaa大片在线观看| 丝袜亚洲欧美日韩综合| 欧美成人a交片免费看| 好吊色欧美一区二区三区| 亚洲一级黄色| 亚洲丝袜在线观看| 中文在线免费一区三区高中清不卡| 成人午夜视频精品一区| 精品少妇一区二区三区视频免付费| 都市激情一区| 国产精品自产拍在线观看| 九九亚洲视频| 成人av一级片| 99久久精品国产一区二区三区| 国产精品第九页| 精品国产一区二区精华| 国产盗摄在线观看| 成人免费在线网址| 欧美区日韩区| 能看毛片的网站| 亚洲精品乱码久久久久久黑人| 夜夜躁很很躁日日躁麻豆| 一区二区在线视频播放| av综合电影网站| 日韩精品成人一区二区在线观看| 久久综合九色| 少妇精品无码一区二区免费视频| 色婷婷av一区二区三区软件| 狠狠色伊人亚洲综合网站l| 亚洲 日韩 国产第一| 香蕉免费一区二区三区在线观看| 亚洲乱码一区二区三区| 精品一二线国产| 日本黄色片免费观看| 欧美一区二区三区视频免费 | 99re成人在线| 日韩一区二区视频在线| 国产亚洲人成a一在线v站| 欧美日韩尤物久久| 在线视频一区观看| 国产一区欧美一区| 日韩福利片在线观看| 精品视频久久久久久| 免费成人动漫| 亚洲精品影院| 国产一区二区成人久久免费影院 | 亚洲v在线看| 欧洲成人午夜精品无码区久久| 精品国产鲁一鲁一区二区张丽| 亚洲三区在线播放| 国产精品激情av在线播放 | 国产午夜精品理论片a级探花| 色综合一本到久久亚洲91| 一区不卡视频| 韩国午夜理伦三级不卡影院| 久久夜色精品亚洲| 亚洲性视频网站| 中文字幕综合| 丁香色欲久久久久久综合网| 26uuu精品一区二区三区四区在线| 无码人妻精品一区二区三区不卡| 视频在线观看99| 成人福利一区| 一区二区三区入口| 黄色精品在线看| 嫩草香蕉在线91一二三区|