Vue 项目集成 husky&commitlint&lint-staged&prettier

361 阅读2分钟

项目中通过集成一些工具,比如 husky&commitlint&lint-staged&prettier,可以轻松实现代码格式化,代码校验,代码提交规范等等,使团队代码风格统一,便于阅读,便于理解。

项目环境

项目是 Vue 项目,Node 版本是 v14.18.2npm 版本是 6.14.15

注意:集成工具的版本也要和项目环境适配,不能直接使用最新版本。
> node -v
v14.18.2

> npm -v
6.14.15

工具介绍

husky

husky 是一个为 git 客户端增加 hook 的工具。它提供了很多git hooks(如commit, push, receive等),我们可以很方便在这些钩子中检测提交信息是否规范,运行测试用例,检测代码等等。

commitlint

commitlint 是一个用来校验提交信息的工具。

提交格式如下:

git commit -m <type>[optional scope]: <description>

其中type可以是以下值:

  • build:主要目的是修改项目构建系统(例如 glup,webpack,rollup 的配置等)的提交
  • ci:主要目的是修改项目持续集成流程(例如 Travis,Jenkins,GitLab CI,Circle等)的提交
  • docs:文档更新
  • feat:新增功能
  • fixbug 修复
  • perf:性能优化
  • refactor:重构代码(既没有新增功能,也没有修复 bug)
  • style:不影响程序逻辑的代码修改(修改空白字符,补全缺失的分号等)
  • test:新增测试用例或是更新现有测试
  • revert:回滚某个更早之前的提交
  • chore:不属于以上类型的其他类型(日常事务)

optional scope:一个可选的修改范围。用于标识此次提交主要涉及到代码中哪个模块。 description:一句话描述此次提交的主要内容,做到言简意赅。

注意:`type``description`之间有一个空格。

例如:

git commit -m "fix: 修复什么bug"

lint-staged

lint-staged 是一个用来检测 git 暂存区的文件的工具。

prettier

prettier 是一个用来格式化代码的工具。

集成 husky

安装

npm install husky@7.0.0 -D

启用

npx husky install

执行完上面命令后,根目录会出现一个.husky的目录。

配置

package.jsonscripts中加入"prepare": "husky install"

{
  "scripts": {
    "prepare": "husky install"
  }
}

并运行一次。

npm run prepare

这样其他人下载项目代码以后,自动启用hook

集成commitlint

安装

npm install @commitlint/cli@13.1.0 @commitlint/config-conventional@13.1.0 @commitlint/core@16.0.0 -D

配置

在根目录新建一个commitlint.config.js文件,并输入以下内容:

module.exports = {
  extends: [
    '@commitlint/config-conventional'
  ]
}

创建commit-msg钩子

.husky目录新建一个commit-msg文件,并输入以下内容:

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npx --no-install commitlint --edit $1

这时,提交信息就会校验是否符合规范了。

可以试下。

git add .
git commit -m "随便写点什么"

不符合提交规范会给出提示,阻止提交。

集成lint-staged

安装

npm install lint-staged@11.1.2 -D

配置

根目录创建 .lintstagedrc 配置文件

{
  "./src/**/*.{js,jsx,ts,tsx,vue,less,sass,scss,css.json}": ["prettier --write"]
}

集成prettier

安装

npm install prettier@1.19.1 -D

配置

根目录创建.prettierrc.js文件

// 详见https://prettier.io/docs/en/options.html
module.exports = {
  printWidth: 80, // 每行的长度
  tabWidth: 2, // 缩进的空格数
  useTabs: false, // 用tabs而不是空格缩进
  semi: true, // 每个语句末尾是否加分号,false只有在编译报错时才加
  singleQuote: false, // 使用单引号代替双引号,jsx引号规则将会忽略此配置。
  quoteProps: "as-needed", //
  jsxSingleQuote: false, // 在jsx中使用单引号代替双引号
  trailingComma: "es5", // 是否有末尾的逗号,例如数组或对象的最后一项。/es5/none/all
  bracketSpacing: false, // 在对象字面量{}的语法中打印空格
  jsxBracketSameLine: false, // 开始标签的>是否和之前内容在同一行
  arrowParens: "always", // 箭头函数的参数是否加括号 /always/avoid
  rangeStart: 0, // 需要格式化的开始位置
  rangeEnd: Infinity, // 需要格式化的结束位置
};

创建pre commit钩子

.husky目录新建一个pre-commit文件,并输入以下内容:

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npx --no-install lint-staged

结语

这样,在提交代码前,会先执行lint-staged,利用prettier对代码进行格式化,然后执行commitlint对提交信息进行校验,最后提交的代码就是统一规范的了。

参考

vue项目集成husky, commitlint, lint-staged, prettier总结

husky v8.0.3

commitlint

lint-staged

prettier