造成良好統一的代碼規範,有利於提升代碼的可讀性,減小潛在的錯誤,便於團隊協做開發。本文簡單介紹JS、CSS、 Git Commit 的規範工具及用法。css
咱們使用ESlint對JS進行代碼規範。node
你能夠全局安裝:npm install eslint -g
git
或者也能夠在你的項目安裝 npm install eslint --save-dev
express
安裝完成後,可在命令行檢查你的代碼是否符合規範。若是是全局安裝則可使用 eslint your-file
檢查你的文件。若是是項目內安裝則使用:./node_modules/.bin/eslint your-file
。npm
經過eslint --init
命令能夠生成一個配置文件。你也能夠本身建立.eslintrc.*
文件,或者在package.json
中經過eslintConfig
配置。在這裏咱們使用.eslintrc
文件進行配置。當你使用eslint
命令檢查你的代碼時,它會從當前目錄開始一層層向上查找是否存在.eslintrc
文件,直到找到最近的一個.eslinrc
文件,做爲這次檢查的規則。json
你能夠在ESLint官網查看全部配置項。less
目前已經有不少大廠公開了他們的代碼規範,也有不少相對應的 ESLint 插件,咱們能夠在.eslintrc
中配置相對應的插件,這樣就不用咱們手動去添加一個個規則了。ide
以我目前使用的Airbnb的代碼規範爲例,他提供了eslint-config-airbnb-base插件,所以我只須要在項目安裝本插件:工具
npx install-peerdeps --save-dev eslint-config-airbnb-base
測試
而且在.eslintrc
中配置上這個插件, 大功告成!
{ "extends": ["airbnb-base"] }
須要注意的一點是,若是你是使用全局命令eslint
你的代碼,在相應的.eslintrc
中的extends
,plugins
都須要在全局安裝。不然eslint
會找不到對應的插件。
最後,若是你還想對現有的 airbnb
或者其餘規則進行配置,則可在.eslintrc
中的rules
中加上相應的配置。
{ "extends": ["airbnb-base"], "rules": { // 你的個性化配置 "rule-name": "" // 0-off, 1-warn, 2-error } }
還有一個比較例外的是可使用如下方式,針對某些文件,從新修改相應規則:
"overrides": [ { "files": ["*-test.js","*.spec.js"], "rules": { "no-unused-expressions": "off" } } ]
可是有些時候有些地方你可能真的須要禁用某些規則,eslint
提供了幾種禁用方式:
/* eslint-disable [rules] */
:這行以後的全部代碼禁用eslint
規則。/* eslint-disable-line [rules] */
: 這一行禁用eslint
規則。/* eslint-disable-next-line [rules] */
: 下一行禁用eslint
規則。其中[rules]
是可選的,若是沒有rules
則禁用全部規則,若是有rules
則禁用全部規則。
如 /* eslint-disable */
則會禁用掉全部規則,/* eslint-disable no-console*/
則只會禁用掉no-console
這條規則。
我選擇了StyleLint來規範個人 CSS
。它能夠說和eslint
很是像了。
一樣的,全局或者項目下安裝stylelint
.
npm install stylelint -g
安裝完成後,若是是全局安裝則可使用 stylelint your-css-file
檢查你的文件。若是是項目內安裝則使用:./node_modules/.bin/stylelint your-css-file
。
能夠經過三種方式對stylelint
進行配置:
package.json
中的stylelint
屬性;.stylelintrc
文件stylelint.config.js
文件導出一個 JS 對象和 ESLint
同樣,咱們能夠在extends
中指定第三方插件,rules
來配置對應的規則。這裏咱們仍是繼續使用Airbnb CSS 規範。
npm install stylelint-config-airbnb
在配置文件中聲明:
{ "extends": "stylelint-config-airbnb"}
注意,若是你的.stylelintrc
文件是在根目錄下,則extends
的路徑須要寫成絕對路徑,好比:
{ "extends": "/usr/local/lib/node_modules/stylelint-config-airbnb" }
最後,運行stylelint your-css-file
就能夠出現規範檢查結果啦!stylelint
默認會支持css
,scss
,less
因此你也不用擔憂哦~
一樣,你也能夠像ESLint
同樣,經過rules
配置你本身的規則。
stylelint
的規則也和 ESLint
同樣。因此若是熟悉了ESLint
, stylelint
真的但是說是無縫上手哦~
在這一步我會進行兩步操做:
ESLint
,stylelint
是否所有經過;commit
信息是否符合規範。OK, Let's do it!
githooks
檢測代碼規範是否經過咱們使用husky來管理咱們的githooks
。在安裝husky
以前,請確保你的項目已經git init
了。
安裝husky
:npm install husky --save-dev
在package.json
中定義咱們須要的鉤子及執行的命令:
{ "scripts": { "lint:es": "eslint", // lint js "lint:css": "stylelint src/**/*.css", // lint css "lint:all": "npm-run-all lint:es lint:css" // lint es, css }, "husky": { "hooks": { "pre-commit": "npm run lint:all", } } }
在這裏咱們分別定義了lint:es
和lint:css
兩個命令來檢測代碼規範。你能夠分別運行這兩個命令。也能夠定義一個命令同時運行這兩個命令,我在這裏使用了npm-run-all:
npm install npm-run-all --save-dev
咱們定義了在pre-commit
鉤子觸發時會執行npm run lint:all
命令。pre-commit
鉤子會在git commit
時觸發,若是lint:all
沒有經過,則本次commit
會失敗。
commit
信息是否符合規範在這裏,咱們使用阮老師這篇文章中提到的 git
提交規範, 大體是:
<type>(<scope>): <subject> // 空一行 <body> // 空一行 <footer>
其中,type
可選項爲:
feat:新功能(feature)
fix:修補bug
docs:文檔(documentation)
style: 格式(不影響代碼運行的變更)
refactor:重構(即不是新增功能,也不是修改bug的代碼變更)
test:增長測試
chore:構建過程或輔助工具的變更
安裝commitlint
, 以及相對應的commit
規範。和eslint
同樣,commitlint
爲咱們提供檢測功能,同時他也有不一樣的插件來對應不一樣的規範風格。你能夠在這裏查看你們分享出來的相應規範的配置。
npm install --save-dev @commitlint/{config-conventional,cli}
生成配置文件:
echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
它也支持多種文件格式的配置文件:
Configuration is picked up from commitlint.config.js, .commitlintrc.js, .commitlintrc.json, or .commitlintrc.yml file or a commitlint field in package.json
而且經常使用的配置項也與ESLint
很類似:
{ "extends": ['@commitlint/config-conventional'], // 擴展的規則集 "rules": { // commitmsg 的自定義規則 } }
這時候你就能夠檢查你要提交的commit
信息是否符合規範了:
echo "foo" | npx commitlint
不過這樣很雞肋,我要先commit
一次要提交的信息,經過了,再用這條消息提交一次。咱們徹底能夠在githooks
時來解決這個問題:
{ "scripts": { "commitmsg": "commitlint -e GIT_PARAMS" }, "husky": { "hooks": { "pre-commit": "npm run lint:all", "commit-msg": "npm run commitmsg" } } }
在這裏和githooks
同時使用時須要加上GIT_PARAMS
這個環境變量。咱們在commit-msg
這個鉤子時調用npm run commitmsg
來判斷commit
信息是否符合規範。
commit msg
要想記住全部的commit
類型和規範也是比較麻煩的事,commitizen
提供交互式的方式來幫助咱們填寫commit msg
。
commitizen
及其adapater
: npm install -g commitizen cz-conventional-changelog
adapater
: echo '{ "path": "cz-conventional-changelog" }' > ~/.czr
git cz
代替 git commit -m
來填寫 commit msg
,會出現一個交互式工具:OK。完成以上三步以後咱們的git
工做流變成了:
git add . git cz
而後就會檢查咱們的eslint
, stylelint
, commitlint
。這樣,當你提交成功時,你的JS
, CSS
, Commit Msg
也是徹底符合規範的哦~