Logo Vincent
返回文章列表

规范的代码提交:Conventional Commits

Web
规范的代码提交:Conventional Commits

【前言】

本文介绍如何提交规范的commit msg,

规范的commit msg可以看这个网站: https://www.conventionalcommits.org/en/v1.0.0/

【commitizen】

可以手动提交符合规范的commit msg,如下

git commit -m "fix: fix click button bug..."

手动提交符合规范的msg比较麻烦,

可以使用commitizen这个工具,

https://www.npmjs.com/package/commitizen

安装commitizen

npm install -g commitizen

安装对应的规范

npm i -D cz-conventional-changelog
echo '{ "path": "cz-conventional-changelog" }' > .czrc

使用git cz替换git commit -m提交commit,效果如下

这样就可以交互式的提交符合规范的commit msg了

【commitlint+husky】

虽然已经安装了commitizen,

可以使用git cz提交符合规范的commit msg了,

但是无法约束其他人也是用git cz,

这里需要用到commitlint进行检测,

https://github.com/conventional-changelog/commitlint

但是commitlint只是检测commit msg是否规范的工具,

并不能自动检测每次提交的commit msg,

这里需要使用到husky这个git hooks工具,

https://typicode.github.io/husky/#/

安装husky

npm i -D husky

注册git hooks

npx husky install

package.json中添加脚本,使在prepare时候就注册git hooks

npm pkg set scripts.prepare="husky install"

安装commitlint

npm install --save-dev @commitlint/config-conventional @commitlint/cli

添加commitlint到git hook

npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"'

添加commit规范

echo "module.exports = {extends: ['@commitlint/config-conventional']};" > commitlint.config.js

好了,这里使用普通的git commit -m提交不符合规范的msg时,提示如下

【lerna】

如果你的项目使用lerna来管理,

通过以上配置后lerna publish会失败,

需要配置下lerna.json文件,如下

{
  "packages": ["packages/*"],
  "version": "independent",
  "command": {
    "publish": {
      "allowBranch": "master",
      "message": "chore(release): publish"
    }
  }
}

【lint-staged】

如果想通过husky添加一下其他的检查,例如eslint等,

可以使用lint-staged这个工具,

https://www.npmjs.com/package/lint-staged

lint-staged结合husky可以在commit前做一些检测

安装lint-staged

npm install --save-dev lint-staged

使用husky添加一个pre commit钩子

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

在项目根路径下创建lint-staged的配置文件.lintstagedrc.js

module.exports = {
  "*.js": "npm run lint",
};

内容可以是你自己定制的一些检测

配置好后,每次commit前就会执行你配置的lint操作,例如

【总结】

1.提交符合规范的commit msg,https://www.conventionalcommits.org/en/v1.0.0/

2.使用commitizen工具提交符合规范的commit msg, https://www.npmjs.com/package/commitizen

3.使用commitlint检测提交的commit msg是否符合规范, https://github.com/conventional-changelog/commitlint

4.使用husky注册git hook在提交前使用commitlint检测提交是否规范, https://typicode.github.io/husky/#/

5.如果使用lerna管理项目,需要修改下lerna.json文件

6.使用lint-staged在提交前进行lint检测,https://www.npmjs.com/package/lint-staged

总结整个流程,如下

# 安装commitizen,安装后使用git cz替代git commit即可提交符合约定的commit
npm i -g commitizen

# 告诉commitizen使用哪个规范
npm i -D cz-conventional-changelog
echo '{ "path": "cz-conventional-changelog" }' > .czrc

# 安装husky,安装后即可通过husky配置一些git hooks
npm i -D husky

# 注册husky
npx husky install

# 添加husky的prepare脚本,目的是让其他用户在执行完npm i后自动注册husky
npm pkg set scripts.prepare="husky install"

# 上述命令在有的npm版本不支持,可以手动在package.json中添加如下脚本
"prepare": "husky install",

# 安装commitlint
npm i -D @commitlint/config-conventional @commitlint/cli

# 通过husky添加commitlint的git hook
npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"'

# 添加commitlint.config.js配置文件
echo "module.exports = {extends: ['@commitlint/config-conventional']};" > commitlint.config.js

# 至此添加了commitizen,可以方便的使用git cz提交符合约定的commit
# 添加了husky+commitlint的git hook,可以阻止不符合约定的commit提交

# 如果使用lerna,需要修改lerna.json
{
  "packages": ["packages/*"],
  "version": "independent",
  "command": {
    "publish": {
      "allowBranch": "master",
      "message": "chore(release): publish"
    }
  }
}

# 如果使用lint-staged,步骤如下
npm install --save-dev lint-staged
npx husky add .husky/pre-commit "npx lint-staged"

# lint staged配置文件.lintstagedrc.js
module.exports = {
  '*.js': 'npm run lint',
};

相关推荐

小巧的JS测试框架:AVA

【前言】 常见的JS测试框架有Jest,Mocha等, 今天介绍一个小巧的JS测试框架:ava, https://github.com/avajs/ava

一篇文章开发todolist

【前言】 本文实战开发一个todolist, 基于以下技术栈: react:开发ui, https://reactjs.org/ webpack,构建前端项目, https://webpack.js.org/ localStorage,存储数据, https://developer.mozilla.

一篇文章学会IndexedDB

【简介】 IndexedDB,web端可以直接使用的数据库,详见: https://developer.mozilla.org/zhCN/docs/Web/API/IndexedDB\API 【IndexedDB vs LocalStorage】 之前介绍了LocalStorage:一篇文章学会lo

初始化前端Monorepos项目

【前言】 本文记录初始化一个前端Monorepos项目的过程 【LICENSE】 如果是开源项目, 需要添加LICENSE, 一般推荐使用MIT LICENSE, 模板如下, 其中copyright那一行, 可以替换为自己的信息。 【git】 git的一些基础设置 设置git账号信息 配置gitig

一篇文章判断用户是否在线

【前言】 如何判断用户在线,而不是用户网络是否连通, 在线:连网,可以访问internet 连通:连网,不能访问internet 【是否在线】 如上,判断是否在线,需要检测是否可以访问internet nodejs 在nodejs下,可以通过ping一些常见的域名来确定, 这里封装了一个工具, ht

一篇文章学会LocalStorage

【简介】 LocalStorage,即本地存储,详见: https://developer.mozilla.org/zhCN/docs/Web/API/Window/localStorage 【cookie vs LocalStorage】 服务端是否可以获取? cookie:服务端可以获取,每次请

mantine-ui快速上手

【前言】 2023年,前端开发的ui框架应该用哪个呢, 一些基本的诉求: 1.支持pc和移动端 2.支持黑夜&白天主题切换 3.组件丰富 4.支持react 4是技术栈选择,非通用 按以上要求在github上快速搜索下react相关ui库, 从start数,issues数,最后commit时间等维度

前端Monorepos项目使用npm-workspaces

【前言】 之前一直使用 lerna 来管理前端 monorepos 项目, 今天升级 lerna 后发现不支持 bootstrap 命令了, 替换为了 npm 的 workspaces 相关命令。 【lerna bootstrap】 lerna 的相关使用可以看这篇文章, 一文学会用Lerna管理多

Nx-VS-Lerna

【前言】 nx和lerna都是优秀的monorepos工具, 本文来对比一下两者的不同, https://nx.dev/ https://lerna.js.org/ 对比之前可以先看下面两篇文章, 了解nx和lerna的基本使用, 一文学会用Lerna管理多个npm包 强大的构建系统:NX 【任务执

强大的构建系统:NX

【前言】 nx是一个强大的构建系统, 这么说可能比较模糊, 本文实践一个项目,带大家了解nx, 感兴趣的也可以自己探索: https://nx.dev/ nx一些典型的应用场景: 1.基于package的monorepo管理 2.完整的前端项目管理 3.react,angular等项目管理 4.no

一篇文章了解JS并行任务

【前言】 在开发过程中大部分场景是顺序执行代码, 也有场景要求并行执行多个任务, 本文研究下如何高效的并行执行任务。 【并行场景】 常见并行执行任务的场景 1.并行执行多个请求 2.并行下载文件 【并行任务】 上述场景中任务的共同点是 1.多个任务没有依赖关系 2.多个任务完成耗时不确定 3.要求最

一篇文章学会Webpack5.x

【前言】 Web前端构建离不开webpack, 众所周知webpack的配置很多很复杂, 甚至可以设置“webpack配置工程师”, 本文抓住webpack核心概念, 和业务开发中常用配置进行讲解, 争取一篇文章学会webpack使用和配置。 【常用文档】 webpack官网 webpack手册:可

© 2026 vincentqiao.com . 保留所有权利。