lint-staged
lint-staged/lint-staged: 🚫💩 — Run linters on git staged files (github.com)
lint-staged 是一个能够对 Git 暂存区文件执行脚本的工具,它通常与 Husky 一起使用。它的主要功能是针对 Git 暂存区(即将提交的文件)运行预定义的脚本,而不是对整个项目。
通常情况下,例如:对整个项目运行 ESLint(用于 JavaScript 代码检查),可能会导致检查过程较为缓慢,并且检查结果可能包含许多与即将提交的文件无关的内容。lint-staged 的优势在于它只对 Git 暂存区进行检查,这样可以提高效率并确保检查结果的相关性。
快速开始
lint-staged 通常与 Husky 一起使用。有关 Husky 的内容,请参阅 typicode/husky: Git hooks made easy 🐶 woof! (github.com)。
安装
npm install --save-dev lint-staged
添加钩子
echo "npx lint-staged" > .husky/pre-commit
配置文件
在项目根目录下,创建 .lintstagedrc.json
,内容如下:
{
"*": "prettier --write",
"*.js": "eslint"
}
这个配置表示,并行执行:
- 对匹配
*
任意文件,执行prettier --write
命令; - 对匹配
*.js
特定文件,执行eslint
命令。
尝试一下
目标:git commit 时,仅对 Git 暂存区的文件,执行 ESLint 检查代码质量、Prettier 格式化代码风格
初始化项目:
mkdir lint-staged-demo
cd lint-staged-demo
npm init -y
git init
echo "node_modules" > .gitignore
husky
安装 husky:
npm install --save-dev husky
初始化 husky:
npx husky init
lint-staged
安装 lint-staged:
npm install --save-dev lint-staged
添加钩子:
echo "npx lint-staged" > .husky/pre-commit
在项目根目录下,创建 .lintstagedrc.json
,内容如下:
{
"*": "prettier --write",
"*.js": "eslint"
}
ESLint/Prettier
安装 ESLint、Prettier:
npm install --save-dev eslint prettier
在项目根目录中,创建 .eslintrc.json
,内容如下:
{
"env": {
"node": true,
"es6": true
},
"rules": {
"no-unused-vars": "error"
}
}
在项目根目录中,创建 .prettierrc.json
,内容如下:
{
"printWidth": 80,
"semi": false
}
其他
在项目根目录中,创建 index.js
,内容如下:
const name = "CokeBeliever";
接着,创建 index.html
,内容如下:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>CokeBeliever</title>
</head>
<body>
<div><p>未格式化之前 div p 标签在同一行!未格式化之前 div p 标签在同一行!未格式化之前 div p 标签在同一行!未格式化之前 div p 标签在同一行!未格式化之前 div p 标签在同一行!</p></div>
</body>
</html>
提交代码:
git add index.js index.html
git commit -m "test"
可以在终端看到:
1:7 error 'name' is assigned a value but never used no-unused-vars
✖ 1 problem (1 error, 0 warnings)
husky - pre-commit script failed (code 1)
可以看到,虽然 Prettier 代码格式化执行成功,但 ESLint 检查报错。
这是因为 ESLint 规则配置了 "不允许未使用的声明变量",我们可以修改 index.js
,内容如下:
const name = "CokeBeliever";
console.log(name);
再次,提交代码:
git add index.js index.html
git commit -m "test"
检查通过,提交成功,下面是 Prettier 格式化后的代码:
index.js
const name = "CokeBeliever"
console.log(name)
根据配置 semi
,自动去除尾随分号。
index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>CokeBeliever</title>
</head>
<body>
<div>
<p>
未格式化之前 div p 标签在同一行!未格式化之前 div p
标签在同一行!未格式化之前 div p 标签在同一行!未格式化之前 div p
标签在同一行!未格式化之前 div p 标签在同一行!
</p>
</div>
</body>
</html>
根据配置 printWidth
,当单行字符数超过限制,自动换行。