216  
查询码:00000023
前端项目代码规范配置(二)
作者: 王宏奔 于 2021年12月27日 发布在分类 / 人防组 / 人防前端 下,并于 2021年12月27日 编辑

集成 husky 和 lint-staged

我们在项目中已集成 ESLint 和 Prettier,在编码时,这些工具可以对我们写的代码进行实时校验,在一定程度上能有效规范我们写的代码,但团队可能会有些人觉得这些条条框框的限制很麻烦,选择视“提示”而不见,依旧按自己的一套风格来写代码,或者干脆禁用掉这些工具,开发完成就直接把代码提交到了仓库,日积月累,ESLint 也就形同虚设。

所以,我们还需要做一些限制,让没通过 ESLint 检测和修复的代码禁止提交,从而保证仓库代码都是符合规范的。

为了解决这个问题,我们需要用到 Git Hook,在本地执行git commit的时候,就对所提交的代码进行 ESLint 检测和修复(即执行eslint --fix),如果这些代码没通过 ESLint 规则校验,则禁止提交。

实现这一功能,我们借助 husky   lint-staged 。

husky —— Git Hook 工具,可以设置在 git 各个阶段(pre-commit、commit-msg、pre-push等)触发我们的命令。
lint-staged —— 在 git 暂存的文件上运行 linters。

配置 husky

  • 自动配置(推荐)

    使用husky-init命令快速在项目初始化一个 husky 配置。

npx husky-init


我们输入 y

自动配置完毕项目根目录会出现 .husky 文件夹。

package.json 文件会增加一条 prepare 命令,devDependencies 会增加 husky

// package.json
{
  "scripts": {
    "prepare": "husky install"
  },
  "devDependencies": {
    "husky": "^7.0.0"
  }
}

husky 只是被添加到了 devDependencies 中,还需安装一下。

npm install
到这里,husky 配置完毕,现在我们来使用它:

husky 包含很多hook(钩子),常用有:pre-commit、commit-msg、pre-push。这里,我们使用pre-commit来触发 ESLint 命令。

修改.husky/pre-commithook 文件的触发命令:

eslint --fix ./src --ext .vue,.js,.ts

image

上面这个pre-commithook 文件的作用是:当我们执行git commit -m "xxx"时,会先对src目录下所有的.vue、.js、.ts文件执行eslint --fix命令,如果 ESLint 通过,成功commit,否则终止commit。

但是又存在一个问题:有时候我们明明只改动了一两个文件,却要对所有的文件执行eslint --fix。假如这是一个历史项目,我们在中途配置了 ESLint 规则,那么在提交代码时,也会对其他未修改的“历史”文件都进行检查,可能会造成大量文件出现 ESLint 错误,显然不是我们想要的结果。

我们要做到只用 ESLint 修复自己此次写的代码,而不去影响其他的代码。所以我们还需借助一个神奇的工具 lint-staged 。

配置 lint-staged

lint-staged 这个工具一般结合 husky 来使用,它可以让 husky 的hook触发的命令只作用于git add那些文件(即 git 暂存区的文件),而不会影响到其他文件。

接下来,我们使用 lint-staged 继续优化项目。

  1. 安装 lint-staged

    npm i lint-staged -D
  2. 在package.json里增加 lint-staged 配置项

    image

    "lint-staged": { "*.{vue,js,ts}": "eslint --fix" },

    这行命令表示:只对 git 暂存区的.vue、.js、.ts文件执行eslint --fix。

  3. 修改.husky/pre-commithook 的触发命令为:npx lint-staged

    image

至此,husky 和 lint-staged 组合配置完成。

现在我们提交代码时就会变成这样:

假如我们修改了scr目录下的test-1.js、test-2.ts和test-3.md文件,然后git add ./src/,最后git commit -m "test...",这时候就会只对test-1.js、test-2.ts这两个文件执行eslint --fix。如果 ESLint 通过,成功提交,否则终止提交。从而保证了我们提交到 Git 仓库的代码都是规范的。

image

  • 提交前test-1.js、test-2.tsimage

  • 提交后test-1.js、test-2.ts自动修复代码格式 image

无论写代码还是做其他事情,都应该用长远的眼光来看,刚开始使用 ESint 的时候可能会有很多问题,改起来也很费时费力,只要坚持下去,代码质量和开发效率都会得到提升,前期的付出都是值得的。

这些工具并不是必须的,没有它们你同样可以可以完成功能开发,但是利用好这些工具,你可以写出更高质量的代码。特别是一些刚刚接触的人,可能会觉得麻烦而放弃使用这些工具,失去了一次提升编程能力的好机会。



 推荐知识

 历史版本

修改日期 修改人 备注
2021-12-27 16:43:11[当前版本] 王宏奔 创建版本

 附件

附件类型

JPGJPG

  目录
    知识分享平台 -V 4.8.7 -wcp