来自处女座的强迫症😭
搬砖体验🛵🛵🛵大大提升
开发效率🚀🚀🚀也大大提高
🌚🌚对于存量代码,也能渐进式📈规范
🚧 eslint~代码质量
eslint 主要用来检查代码的开发质量,例如是否出现变量定义后未使用/使用时未定义/debugger语句等。除此之外,eslint还可以集中对 js、ts、vue 等部分文件类型做代码风格检查。这些可以通过配置进行检测。
🚩 安装使用
- 安装 Eslint 编辑器插件
- 安装 npm 包
npm i eslint -D插件和 npm 包的区别,实际是 eslint 的 npm 包进行代码检查,安装插件方便在 VSCode 开发时提示代码问题及使用格式化功能。
- 新增配置
在项目根目录下创建 .eslintrc.js 文件,并配置好规则。 - 新增忽略配置
在项目的根目录下创建 .eslintignore 文件,并配置好忽略校验的文件。
Eslint是默认忽略/node_modules/的文件的,这个目录不需要配置。 - 测试 eslint 是否生效
- 校验某个文件
npx eslint XXX.js - --ext 可以指定校验的文件类型
npx eslint --ext .js,.jsx,.vue src - --fix 可以修复 elint 部分规则
npx eslint --fix --ext .js
- 校验某个文件
Rules Reference - ESLint - Pluggable JavaScript Linter
⛺️ prettier~代码风格
prettier 的作用是对代码进行风格检查,针对的文件类型更加全面,例如js、ts、css、html、json、md等。这些可以通过配置进行检测。
🚩 安装使用
- 安装 prettier 编辑器插件
- 安装 npm 包
npm i prettier -D插件和 npm 包的区别,插件是给VSCode编辑器本地提示以及格式化代码,prettier包是用于命令行方式进行风格检查。
- 新增配置
在项目根目录下创建 .prettierrc 文件,并配置好规则。 - 新增忽略配置
在项目的根目录下创建 .eslintignore 文件,并配置好忽略校验的文件。 - 测试 prettier 是否生效
- 格式化某个文件
npx prettier --write XX.js - 格式化全部文件
npx prettier --write . - 检查文件是否已格式化
npx prettier --check .
- 格式化某个文件
👹 eslint prettier冲突解决
因为eslint中继承了 eslint-config-standard,当 eslint 有些风格检查配置与 prettier 配置相互冲突时,编辑器设置了保存时自动格式化并修复时,启用了eslint --fix修复时,问题虽然修复了,但因为又运行了 prettier 格式化,所以会被 prettier 恢复。
🚩 解决方案
- 用 eslint-config-prettier 关闭 eslint 中与 prettier 相互冲突的规则
- 用 eslint-plugin-prettier 使 eslint 风格检查时使用 prettier 的配置,各司其职
- 安装依赖
npm i eslint-config-prettier eslint-plugin-prettier -D - 修改 eslint 配置
✅ 这样再保存,自动格式化和修复也能正常工作了。
🚨 husky~git hooks钩子
git 执行特定事件(如 commit、push、receive 等)时,触发运行的脚本就是 githooks,类似于框架的生命周期。githooks 保存在 .git 文件夹中,如果没有该文件,需要执行git init初始化下。
husky是一个让我们使用git hook更加方便的工具。下面会用到 pre-commit 和 commit-msg 两个钩子,都会在 git commit 执行前执行,可以使用 git commit --no verify 命令绕过该钩子
🚩 安装使用
-
安装依赖
npm i husky -D -
启用 husky
npx husky install -
创建 pre-commit 钩子和 commit-msg 钩子
npx husky add .husky/pre-commit \"npx --no-install lint-staged\"
npx husky add .husky/commit-msg \"npx --no-install commitlint -e $1\"
git add .husky这里用到了 lint-staged 和 commitlint 工具对代码和提交信息进行校验,后续安装后就可以实现 git commit 前拦截进行代码检查。
🎢 lint-staged~过滤stage暂存区文件
lint-staged 是一个在 git 暂存文件上运行 lint 的工具。如果在整个项目上运行lint,一方面速度会很慢,另一方面对于旧项目会有一堆不符合规范,但不影响功能的存量代码。lint-staged能够让lint只检测暂存区的文件,这样速度很快,也能实现渐进性对项目进行规范。
🚩 安装使用
- 安装( node 版本 ^14.13.1 || >=16.0.0)
npm install -D lint-staged - 配置 lint-staged
在 package.json 新增 lint-staged 字段配置对不同文件执行检查并修复。
另外,在 pre-commit 钩子上面已经配置好执行 lint-staged 了。 - 测试
✅git add提交修改文件之后,运行 npx lint-staged 就会对文件进行 lint 校验
📝 cz~自定义commit msg规范
commitizen 是一个能够快速地帮助完成提交信息补充的工具。cz-customizable 是一个可以自定义提交说明的规范适配器,默认会去读取项目中.cz-config.js配置。
🚩 安装使用
- 安装
npm install -D commitizen cz-customizable - 添加适配器
在 package.json 新增 config - 配置规范
在项目根目录下新建 .cz-config.js - 测试
npx git cz
✅ 此时就可以根据提交说明的提示输入。
除了使用 cz-customizable,也可以用 commitlint prompt 字段使用 prompt 提词器,需要安装 @commitlint/cz-commitlint 和 @commitlint/prompt-cli 依赖( commitlint - Lint commit messages)
另外,commitizen 实际上只起提示作用,对规范做不到强制要求。所以仍需要配合 commitlint 和 husky 来使用。根据实际情况选择使用 git commit 或 git cz 。
🔻 注意:如果使用git cz,请先执行 npx lint-staged 以免代码检查不通过,commit 说明jiu白写了。
📽 commitlint~commit msg格式校验工具
目前认同范围最广的基础规范是约定式提交 (conventionalcommits)。它提供了一组用于创建清晰的提交历史的简单规则。即:
commitlint 也是依赖 husky,目的是在提交前对 commit 提交的说明文字进行校验。上面使用了 cz 自定义提交规范,所以需要使用 commitlint-config-cz 对定制化提交说明进行校验。
commitlint 作用于 commit-msg 阶段,commitizen作用于 pre-commit。
🚩 安装使用
-
安装
npm install -D commitlint-config-cz @commitlint/cli -
配置 commitlint.config.js
配置声明继承 cz 校验适配器,并配置校验规则 -
配置 commit-msg 钩子
上面 husky 已经配置过了
Husky - Git hooks -
测试
✅ 如果提交的 subject 说明为空时,无法提交成功。
📋 standard-version~版本管理(生成commit日志)
standard-version 是一款遵循语义化版本(semver)和 commit message 标准规范的版本自动化工。它能自动升级版本、打 tag 和生成 changelog。
🚩 安装使用
-
安装
npm install -D standard-version -
配置.versionrc.js
hidden 可以将该 type 的提交记录写入changlog,默认false -
配置package发布命令
{ "scripts": { "release": "standard-version", "release:first": "standard-version --first-release " } } -
测试
首次发布执行npm run release:first,会在根目录生成日志changelog,之后发布版本只需执行npm run release。
🚩 版本更新规则
版本号 1.0.0(major.minor.patch)
-
feat 会更新 minor
-
fix 会更新 patch
-
BREAKING CHANGES 会更新 major
假设您的代码的最后一个版本是1.0.0,也可以通过命令发布为指定1.1.0版本npm run release -- --release-as 1.1.0- 或者
npm run release -- --release-as minor
📍 总结
至此,整个过程从
- git add 修改文件后
- eslint、prettier 代码检查
- husky git 钩子启动
- lint-staged 在 pre-commit 仅对暂存区进行代码格式化与修复
- cz 在 pre-commit 阶段对提交说明进行提示
- commitlint 在 commit-msg 阶段对提交说明是否规范进行校验,最终完成 commit 操作
- 版本发布时,使用 standard-version 自动更新版本、打 tag 并输出清晰直观的 changelog
就完成了,实现了🥊 整个团队如何从0到1搭建自定义规范。