规范的代码提交: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手册:可