具备基本工程素养的同学都会注重编码规范,而代码风格检查(Code Linting,简称 Lint)是保障代码规范一致性的重要手段。
ESLint
ESLint
是一个开源的,提供一个插件化的 JavaScript
代码检测工具。ESLint
基本是现在最主流的 JavaScript
代码检查工具了,每一个前端工程师的编辑器上必然会使用的工具,如果你没有装 ESlint
,那说明你不是一个合格的前端工程师。
如何使用?
- 打开
VSCode
,在扩展面板搜索ESLint
安装。使得VSCode
支持ESLint
检查代码。
VSCode
的ESLint
插件,是通过调用ESLint Library
来检查代码的,所以你需要安装npm
包。- 工作目录本地安装:
npm install eslint
- 全局安装:
sudo npm install -g eslint
- 工作目录本地安装:
然后你可以爽歪歪地开启 ESLint
检查代码了。
配置ESLint
ESLint
为开发者提供了一套默认的校验规则,不过说实在的,确实不太好用。所以这里我用的是业界开源的,认可度比较高的 Airbnb JavaScript Style Guide。
首先安装 airbnb
的 ESLint
扩展包
npm install -D eslint-config-airbnb
在 eslintrc.js
文件下进行配置。
module.exports = {
extends: ["airbnb"],
rules: {
// 你可以在这里自定义一些规则,覆盖airbnb的规则
"no-plusplus": 0,
"no-param-reassign": 0,
"no-continue": 0,
"no-restricted-syntax": 0,
},
};
在这里有一点需要说明的是, eslint-config-airbnb
这个 npm
包的规则,其实包含了对 JSX
、React
、React Hook
的校验。如果你不需要这些校验规则,可以安装 eslint-config-airbnb-base
。
然后将 extends
改为以下:
extends: [
'airbnb-base',
],
ESLint + TypeScript
ESLint
同样支持检验 TypeScript
代码,需要安装并配置一下模块。
@typescript-eslint/parser
:让ESLint
使用TS
的语法来检查代码。@typescript-eslint/eslint-plugin
:提供TS
的ESLint
规则。eslint-config-airbnb-typescript
:airbnb
风格的TS
版本。
module.exports = {
extends: [
"airbnb-typescript",
// 'airbnb-typescript/base',
],
parser: "@typescript-eslint/parser",
plugins: ["@typescript-eslint"],
};
好了,现在你可以随意的使用 ESlint
来检查你的 JS/TS
代码了。
一个人代码风格,能符合 ESLint
的规则,固然是一件好事,能够体验一个工程师的编码素养,然而,总有人无视代码检查,即使代码标红了,他也懒得管,直接提交代码到 git
进行发布,为了解决这一现象, husky
就上线了。
husky
husky
提供了一些钩子,比如 pre-commit
,pre-push
,可以在你进行 git commit
或者 git push
前执行一些命令,我们可以在这个阶段调用 ESLint
进行代码检查,如果不通过,就不允许 commit
或者 push
。
使用 husky 的具体做法如下:
首先,安装依赖:
npm install -D husky
然后修改 package.json,增加配置:
"husky": {
"hooks": {
"pre-commit": "eslint src/**/*.ts",
}
},
接着当你进行 git commit
的时候,就会触发 eslint src/**/*.ts
命令。
所以,再也没有人可以把有问题的代码提交到 git
上去啦~
然而,这时候又会出现另外一个问题:
我们有时候会在一个现有的项目中加入代码检查机制,但我们每一次提交的时候,即使你改动的代码符合规则,那些原先不符合规则的旧代码,会让你提交失败!
所以我们需要一个只 Lint
改动代码的工具。
lint-staged
lint-staged
可以让我们只 lint
本地提交所修改的文件,无需检查所有文件。其中 staged 是 Git 里面的概念,指待提交区,使用 git commit -a
,或者先 git add
然后 git commit
的时候,你的修改代码都会经过待提交区。
npm install -D lint-staged
然后,修改 package.json 配置:
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"src/**/*.ts": "eslint"
},
这样就可以只检查提交的代码了。
实际上,lint-staged 给了你提交前代码操作的更大自由度,你可以执行多条命令:
{
"*.js": ["eslint", "prettier --write"]
}
如果 eslint
执行通过,就会执行第二条命令。