husky+ prettier + commitlint 提交前代碼檢查和提交信息規(guī)范

一、安裝相關(guān)的包

npm install -D husky
npm install -D lint-staged // lint鉤子
npm install -D prettiernpm install -g @commitlint/cli @commitlint/config-conventional // commit 規(guī)范

husky npm地址:https://www.npmjs.com/package/husky

lint-staged npm/github地址: https://www.npmjs.com/package/lint-staged / https://github.com/okonet/lint-staged

prettier npm地址:https://www.npmjs.com/package/prettier

二密似、新增配置文件

1焙矛、添加.prettierrc.js文件

// .prettierrc.jsmodule.exports = {
    printWidth: 80,
    semi: false, // 在每個語句的末尾添加分號
    singleQuote: false, // 使用單引號而不是雙引號
    trailingComma: "none", // 多行時盡可能打印尾隨逗號<none|es5|all>
    bracketSpacing: true, // 對象文字中打印括號之間的空格
    jsxBracketSameLine: true, // 將>多行JSX元素放在最后一行的末尾,而不是單獨放在下一行
    arrowParens: "avoid", // 在單個箭頭函數(shù)參數(shù)周圍加上括號<avoid|always>
    requirePragma: false,
    proseWrap: "preserve"
};

其他配置可以查閱相關(guān)文檔:https://prettier.io/docs/en/options.html

2残腌、添加commitlint配置文件
在項目根路徑執(zhí)行

echo "" > commitlint.config.js

復(fù)制下面代碼到文件中

// commitlint.config.jsmodule.exports = {
  extends: ["@commitlint/config-conventional"],
  rules: {
    "type-enum": [
      2,
      "always",
      ["feat", "fix", "docs", "style", "refactor", "test", "chore", "revert"]
    ],
    "subject-full-stop": [0, "never"],
    "subject-case": [0, "never"]
  }
}

用于說明 commit 的類別村斟,只允許使用下面7個標(biāo)識。
feat:新功能(feature)
fix:修補bug
docs:文檔(documentation)
style: 格式(不影響代碼運行的變動)
refactor:重構(gòu)(即不是新增功能抛猫,也不是修改bug的代碼變動)
test:增加測試
chore:構(gòu)建過程或輔助工具的變動

3蟆盹、修改package.json文件
增加如下配置

// package.json
{
  "lint-staged": {
    "src/**/*.{js,ts,tsx}": [
      "prettier --write",
      "tslint --project tsconfig.json",
      "git add ."
    ]
  },
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged",
        "commit-msg": "commitlint -e $GIT_PARAMS"
    }
  },
  "config": {
    "commitizen": {
      "path": "cz-customizable"
    }
  }
}

tslint 相關(guān)配置:https://palantir.github.io/tslint/rules/

4、如需配置eslint
(1)新增eslint相關(guān)的插件

npm install -D eslint eslint-config-ali eslint-plugin-import babel-eslint eslint-plugin-prettier eslint-config-prettier eslint-plugin-react

(2)新增.eslintrc.js文件邑滨,文件中寫入以下配置

module.exports = {
    root: true,
    env: {
      node: true
    },
    'extends': [
      "eslint-config-ali",
      "prettier",
      "plugin:prettier/recommended",
      'plugin:react/recommended',
      'eslint:recommended'
    ],
    rules: {
      'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
      'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
      'no-mixed-spaces-and-tabs': 'off',
      'no-unused-vars': 'off',
      "prettier/prettier": "error",
      "strict": "off",
      "import/no-dynamic-require": "off",
      "global-require": "off",
      "require-yield": "off",
    },
    plugins: ["prettier"],
    parserOptions: {
      parser: 'babel-eslint'
    }
  }
  

eslint相關(guān)配置規(guī)則: https://cloud.tencent.com/developer/section/1135842

(3)修改package.json

 "scripts": {
        ...,
        "lint": "eslint . --ext .js,.ts --ignore-path .gitignore",
        "fix": "npm run lint -- --fix"
    },
    "lint-staged": {
        "src/**/*.{js,ts,tsx}": [
            "prettier --write",
            "eslint --fix --ext .js",
            "git add ."
        ]
    },
    "husky": {
        "hooks": {
            "pre-commit": "lint-staged",
            "commit-msg": "commitlint -e $GIT_PARAMS"
        }
    }

三、使用結(jié)果

1钱反、任意修改一個文件不符合ts要求
執(zhí)行結(jié)果

detanxdeMacBook-Pro:kyc_flatform detanx$ sudo git commit -m 'feat: add format'
husky > pre-commit (node v12.4.0)
  ↓ Stashing changes... [skipped]
    → No partially staged files found...
  ? Running tasks...
    ? Running tasks for src/**/*.{js,ts,tsx}
      ? prettier --write
      ? tslint --project tsconfig.json
        git add .
 
 
 
? tslint --project tsconfig.json found some errors. Please fix them and try committing again.
  
ERROR: /Users/detanx/Desktop/kyc_flatform/src/components/MoneyManage/GoldenIn/index.tsx:92:7 - Forbidden 'var' keyword, use 'let' or 'const' instead
husky > pre-commit hook failed (add --no-verify to bypass)

如果想忽略這個提示可以在執(zhí)行命令時加 --no-verify

例如:

git commit -m 'feat: add format' --no-verify

2掖看、當(dāng)代碼格式和tslint校驗通過后,提交信息不規(guī)范時

detanxdeMacBook-Pro:kyc_flatform detanx$ sudo git commit -m 'feat:add format'
husky > pre-commit (node v12.4.0)
No staged files match any of provided globs.
husky > commit-msg (node v12.4.0)
?   input: feat:add format
?   subject may not be empty [subject-empty]
?   type may not be empty [type-empty]
 
?   found 2 problems, 0 warnings
?   Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint
 
husky > commit-msg hook failed (add --no-verify to bypass)

注: 提交信息必須是規(guī)定的7個標(biāo)識開始面哥,并跟隨一個英文輸入法下的冒號':'和一個空格哎壳,接著是提交的內(nèi)容

舉例:

 git commit -m 'feat: add format'

3、提交成功

[detanxdeMacBook-Pro:kyc_flatform detanx$ git commit -m 'feat: add format'
husky > pre-commit (node v12.4.0)
  ↓ Stashing changes... [skipped]
    → No partially staged files found...
  ? Running tasks...
husky > commit-msg (node v12.4.0)
[master 3b341a99] feat: add forma

四尚卫、配置過程中遇到的一些問題

1归榕、pre-commit 放置在scripts對象中會報一個waring

Warning: Setting commit-msg script in package.json > scripts will be deprecated
Please move it to husky.hooks in package.json, a .huskyrc file, or a husky.config.js file
Or run ./node_modules/.bin/husky-upgrade for automatic update
 
See https://github.com/typicode/husky for usage

意思就是這個命令需要放置在husky對象的hooks中,或者配置在.huskyrc的配置文件中吱涉,類似下面這樣

{
    "husky": {
        "hooks": {
            "pre-commit": "lint-staged",
            "commit-msg": "commitlint -e $GIT_PARAMS"
        }
    },
}

參考鏈接

參考鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末刹泄,一起剝皮案震驚了整個濱河市外里,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌特石,老刑警劉巖盅蝗,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異姆蘸,居然都是意外死亡墩莫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門逞敷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狂秦,“玉大人,你說我怎么就攤上這事推捐×盐剩” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵玖姑,是天一觀的道長愕秫。 經(jīng)常有香客問我,道長焰络,這世上最難降的妖魔是什么戴甩? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮闪彼,結(jié)果婚禮上甜孤,老公的妹妹穿的比我還像新娘。我一直安慰自己畏腕,他們只是感情好缴川,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著描馅,像睡著了一般把夸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上铭污,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天恋日,我揣著相機與錄音,去河邊找鬼嘹狞。 笑死岂膳,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的磅网。 我是一名探鬼主播谈截,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了簸喂?” 一聲冷哼從身側(cè)響起毙死,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎娘赴,沒想到半個月后规哲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡诽表,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年唉锌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竿奏。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡袄简,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泛啸,到底是詐尸還是另有隱情绿语,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布候址,位于F島的核電站吕粹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏岗仑。R本人自食惡果不足惜匹耕,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荠雕。 院中可真熱鬧稳其,春花似錦、人聲如沸炸卑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盖文。三九已至嘱蛋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間五续,已是汗流浹背洒敏。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留返帕,地道東北人桐玻。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓篙挽,卻偏偏與公主長得像荆萤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容