1.0.9 • Published 4 years ago

commitlint-release v1.0.9

Weekly downloads
6
License
ISC
Repository
github
Last release
4 years ago

commitlint-release

NPM version Downloads License

这是一个集成了 commitizencommitlint 又叫@commitlint/clistandard-versionconventional-changelogconventional-changelog-clieditorconfigprettierESLint 基础配置的插件。

前言

如果是自己开发项目,自己对于代码风格要求不那么高的话,自己可以怎么爽怎么来,但是一旦项目涉及到多人协作或有外包同事进入,这时候代码规范和风格是一件特别重要的事情,重要性丝毫不亚于业务逻辑的实现。

社区对这方面给出了很多插件,但是需要一个一个的集成,换个项目又的动手自己复制,多麻烦呀。对于这种类似 CLI 脚手架的工具,最好是做成 npm 包,非常便于携带呦。

commitlint-release 介绍

代码灵感来源:vue-cli-plugin-commitlint-release

这是个小姐姐写的插件,真是厉害呢,就是可惜只支持 Vue 环境,所以如果我要是开发 React 或 Node 的就尴尬了 😅。不过这个插件源代码也很简单,你可以照着 插件开发指南 来学习下 @vue/cli 插件的开发技巧。

commitlint-release 的功能:

  1. 自动检测 commit message 是否符合规范,不规范不允许提交
  2. 自动提示 commit message 填写格式,不怕忘记规范怎么写。
  3. 自动更新 package.json 里的版本号。
  4. 自动生成 changelog,更好的维护版本迭代。
  5. 集成 git add . && git commit 不需要在执行两个命令,配合 shelljs 这个 npm 包能更强大。
  6. 自动格式化代码。

使用

首先安装 commitlint-release

npm i commitlint-release -D

执行 npx init-commitlint 命令来初始化配置

npx init-commitlint

这时会自动在 package.json 中添加相关配置和命令

"scripts": {
  "changelog": "conventional-changelog --config ./node_modules/commitlint-release/lib/log -i CHANGELOG.md -s -r 0",
  "commit": "git add . && git-cz",
  "lint": "eslint --ext .js --ext .jsx src/",
  "release": "standard-version",
  "publish": "node scripts/release.js",
  "format": "prettier --write 'src/**/*.{ts,tsx,json,md,yml,js,jsx,scss,less,stylus,vue}'",
  "push:dev": "node scripts/pushDev.js"
},
"config": {
  "commitizen": {
    "path": "./node_modules/commitlint-release/lib/cz"
  }
},
"husky": {
  "hooks": {
    "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
  }
}

同时也会在项目根目录即 package.json 所在目录,自动增加 commitlint.config.js 文件,其内容为:

module.exports = {
	extends: ["./node_modules/commitlint-release/lib/lint"],
};

除了之外,你还可以运行命令:

npx commitlint-mk

来生成 .prettierrc、.eslintrc.js、.eslintignore、.editorconfig 这四个文件。文件夹内有各自的官网链接和使用方法。

命令介绍

npm run commit      # 自动化 commit message
npm run release     # 自动更新 package.json 里的版本号
npm run changelog   # 自动生成 changelog 更好的维护版本迭代
npm run publish     # 先选择升级的版本类型在生成changelog日志,然后推送到远程
npm run lint        # 使用 eslint 检查代码
npm run format      # 使用 prettier 格式化指定目录的代码
npm run push:dev    # 自己写的脚本命令

自动更新版本号并生成 changelog

npm run publish

输入命令后,提示输入 major | minor | patch ,以当前版本 1.0.0 为例:

  • major:主版本号,当你做了不兼容的 API 修改。这时候的 version 应该为 2.0.0。
  • minor:次版本号,当你做了向下兼容的功能性新增。这时候的 version 应该为 1.1.0。
  • patch:修订号,当你做了向下兼容的问题修正。这时候的 version 应该为 1.0.1。

具体参考:semver 语义化版本控制规范

格式化代码

格式化命令:npm run format

主要是使用 prettier 插件来格式化指定目录的代码,prettier 有一套固定的格式话代码规则,但是这些规则大部分都不可以给我们自定义,只有灰常少的一小部分可以自己配置,可以配置的规则在此 Options ,虽然 prettier 格式化规则较为霸道,但是格式化完还是很好看的,所以多人协作牺牲一点个人写代码的风格还是可以接受的,既然 prettier 负责代码风格,那么 ESlint,就主要用来检查代码质量(例如变量未定义不允许使用等),和补充 prettier 没有照顾到的代码风格(补充的千万不能和 prettier 规则冲突)(例如:注释和代码不能在同一行)。

commit 规范

commit type 规则简单说明

  • feat: 新增一个新特性
  • fix: 默默修了一个 Bug
  • docs: 更新了文档(比如改了 Readme)
  • style: 代码的样式美化,不涉及到功能修改(比如改了缩进)
  • refactor: 一些代码结构上优化,既不是新特性也不是修 Bug(比如函数改个名字)
  • perf: 优化了性能的代码改动
  • test: 新增或者修改已有的测试代码
  • chore: 跟仓库主要业务无关的构建/工程依赖/工具等功能改动(比如新增一个文档生成工具)

关于 commit 规范和相关配置可以去看一下阮一峰老师的文章: Commit message 和 Change log 编写指南

配合 shelljs

平时在开发中会需要频繁的合代码合提交代码,这就出现了两个痛点:

  • 频繁操作,会使用相同的命令,麻烦。。。
  • 提交或合代码的时候,可能会出错,一旦出错还的回归版本,一不小心就挺麻烦。。。

这时就可以根据自己的提交步骤结合 shelljs 来简化提交步骤。npm run push:dev 命令就是用 shelljs 来写的。

常见问题

我有时候会发现 husky 在 commit 阶段没有起作用,可能时 husky 还没有和 git 关联,删除下重新安装就行了。

rm -rf .git/hooks/ && npm i -D husky