husky+ prettier + commitlint 提交前代码检查和提交信息规范

一、安装相关的包

npm install -D husky
npm install -D lint-staged // lint钩子
npm install -D prettiernpm install -g @commitlint/cli @commitlint/config-conventional // commit 规范

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", // 在单个箭头函数参数周围加上括号<avoid|always>
    requirePragma: false,
    proseWrap: "preserve"
};

其他配置可以查阅相关文档:https://prettier.io/docs/en/options.html

2、添加commitlint配置文件
在项目根路径执行

echo "" > commitlint.config.js

复制下面代码到文件中

// 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个标识。
feat:新功能(feature)
fix:修补bug
docs:文档(documentation)
style: 格式(不影响代码运行的变动)
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
test:增加测试
chore:构建过程或辅助工具的变动

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 相关配置:https://palantir.github.io/tslint/rules/

4、如需配置eslint
(1)新增eslint相关的插件

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相关配置规则: 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"
        }
    }

三、使用结果

1、任意修改一个文件不符合ts要求
执行结果

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)

如果想忽略这个提示可以在执行命令时加 --no-verify

例如:

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

2、当代码格式和tslint校验通过后,提交信息不规范时

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)

注: 提交信息必须是规定的7个标识开始,并跟随一个英文输入法下的冒号':'和一个空格,接着是提交的内容

举例:

 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"
        }
    },
}

参考链接

参考链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容