ESLint V9 + Prettier + simple-git-hooks + lint-staged + editorconfig
本来设置了一套,后面直接copy。但是发现在没加过这些的老项目中,比如微信小程序js代码,再从头设置有点忘了,所以简单总结下。
前言
stylelint- eslint
- prettier
- simple-git-hooks
- lint-staged
| 工具 | 功能 | 使用场景 |
|---|---|---|
| stylelint | 检查 CSS 代码 | 我用的 tailwindCSS 比较多,写 CSS 的时候也不用这个检查了 |
| editorconfig | 编辑器的基础格式设置 | 主流编辑器都支持,有些默认支持,有些需要下插件。就是基础的tab缩进,换行符,编码等 |
| eslint | 检查代码错误 | 升级 v9 后,个人的是用 antfu 的 eslint 配置,不过团队中还是选择 prettier 的配置 |
| prettier | 格式化代码 | 自动格式化代码,虽然有的时候格式的挺丑的,但是在团队中大家都一个风格,还是有点用的 |
| simple-git-hooks | 在 git 提交时进行检查 | git 的钩子,在提交代码的时候可以触发一些自定义的东西 |
| lint-staged | 在 git 提交时进行检查 | lint 暂存区(staged)的文件,就很好用了 |
| husky | git 的钩子,复杂的 Git hook 管理 | 功能强大的 git 钩子,比如做 CI/CD hook ,或者写 .sh 脚本 |
以上这些工具配置,感觉够用了,此外像什么 commitlint 这些,感觉用处不大,就不配置了。 husky 功能强大,不过配置有点点复杂,用到再配置。
EditorConfig
先设置这个,这个比较简单,直接在项目根目录下添加 .editorconfig 文件就好了。
root = true
[*]
indent_size = 2
end_of_line = lf
insert_final_newline = true
ESLint
安装:
# eslint 是核心,@eslint/js 是格式化 js 的,eslint-config-prettier 是 prettier 的 eslint 配置,后面会用到
npm install --save-dev eslint @eslint/js eslint-config-prettier
配置文件:
一般客户端系统都是 ESM 模块,所以需要配置 package.json 的 type 为 module。
不过之前的代码有一些是 CommonJS 模块,所以这里不配置 package.json 了,直接使用 .cjs 文件。
- ignores 忽略文件
- 使用 @eslint/js 对 js 预设的规则
- 使用 prettier 的插件规则
const js = require('@eslint/js');
const prettier = require('eslint-config-prettier');
module.exports = [
{
ignores: [
'**/miniprogram_npm/**',
'**/node_modules/**',
'**/dist/**',
'**/lib/**',
'**/.vscode/**'
]
},
{
...js.configs.recommended,
files: ['**/*.{js,jsx,ts,tsx}'],
rules: {
'no-console': 'error',
'no-unused-vars': 'warn',
},
},
prettier,
];
package.json 中添加:
"scripts": {
"lint": "eslint .",
"lint:fix": "eslint . --fix",
}
使用:
可以直接执行命令:
npx eslint .
也可以在 js 文件中使用,敲下 console.log('hello'); ,看看会不会报红。
tips
不知道 eslint 生效没有,可以在 vscode 中,按下 Ctrl + Shift + P ,输入 Restart ESLint Server ,重启 vscode 的 eslint 服务。
打开一个 js 文件,在 vscode 的右下角,文本的类型那里,点击会有 popup ,可以看到 eslint 服务的状态,如果启动错误,查看日志 Open ESLint Output。
Prettier
安装:
# 这里只需要安装 prettier 就好了,跟 eslint 集成的 eslint-config-prettier 插件,刚才上一步安装好了。当然可以再安装一次。
# npm install --save-dev eslint-config-prettier
npm install --save-dev prettier
配置文件:
因为上一步跟 eslint 集成了,所以这里只需要配置 prettier 的配置就好了。
module.exports = {
semi: true, // 语句末尾使用分号
singleQuote: true, // 使用单引号
trailingComma: 'es5', // 多行时尾随逗号
tabWidth: 2, // 缩进空格数
printWidth: 100, // 每行最大长度
};
使用:
这里需要对vscode 的 settings.json 进行配置,让其文件的格式化方式都使用 prettier:
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[javascript]": {
"editor.defaultFormatter": "vscode.typescript-language-features"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}
- 准备一个不合适的格式,对一个 js 文件,写一个 function ,都在一行。
- 可以使用 vscode 的默认快捷键
Ctrl + Shift + P,输入Format Document,格式化文件了。 - 可以在文件中,右键点击,然后选中
格式化文档,格式化文件了。 - 配置 onSave 的时候自动保存,需要在 vscode 的
settings.json中添加editor.formatOnSave为true。 - 执行对整个项目的 prettier 格式化,使用
npx prettier .。
vscode 保存文件自动 prettier 格式化:
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
对整个项目执行 prettier 格式化:
npx prettier . --write
simple-git-hooks 和 lint-staged
这两个配合使用,simple-git-hooks 是 git 的钩子,能触发事件。lint-staged 顾名思义,就是 lint 暂存区(staged)的文件。 那合起来用,就可以提交代码的时候,对 staged 的文件格式化代码。
安装:
npm install --save-dev simple-git-hooks lint-staged
配置:
{
"scripts": {
"postinstall": "npx simple-git-hooks",
},
"simple-git-hooks": {
"pre-commit": "npx lint-staged"
},
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"eslint --fix",
"prettier --write"
],
"*.{json,css,less,scss,md,yaml,yml}": [
"prettier --write"
]
}
}
上面就配置好了,可以提交代码,看看效果。
postinstall 是 npm 的钩子,在安装依赖后的时候执行。
npm 的钩子语法: <生命周期阶段> pre<生命周期阶段> post<生命周期阶段>
| 钩子名 | 说明 |
|---|---|
| prepare | 安装或发布前都会运行(Git hook 推荐) |
| preinstall | 在 npm install 开始之前运行 |
| install | 在依赖包被安装之后运行(对每个包) |
| postinstall | 在安装所有依赖之后运行(项目级) |
| preuninstall | 在卸载之前运行 |
| uninstall | 卸载时运行 |
| postuninstall | 卸载之后运行 |
| prepublishOnly | 仅在 npm publish 时运行 |
| prepack | 在 npm pack 或 publish 打包前运行 |
| postpack | 打包后 |
| postpublish | 发布后运行 |
| preversion | npm version 前运行 |
| version | npm version 期间运行 |
| postversion | npm version 后运行 |
| test | npm test 时运行(默认) |
| pretest | 测试前运行 |
| posttest | 测试后运行 |
| start / build / stop | 常规命令也支持 pre/post 钩子 |