Hoai
问题背景
开发一个项目是一个长期的过程,并非一次性编写完代码就结束了,而是需要持续地使用和维护这些代码。在一个项目中,开发时间可能远小于测试和维护的时间。
由于项目周期如此之长,人员很可能会不断更替。这意味着可能会有许多人参与编写代码,而每个人都有自己独特的编码风格。我们不应完全禁止这种多样性,但对于换行、括号、分号等语法规范,我们可以制定一套通用的规则,并要求所有开发者都遵守。
什么是 ESLint
ESLint 是一个静态代码分析工具,能够快速发现你代码中的问题。它已集成到大多数文本编辑器中,你也可以将 ESLint 作为持续集成/持续部署(CI/CD)流程的一部分来运行。
为此,ESLint 提供了一套可配置的规则,用于检测并防止代码违规行为。此外,ESLint 还可以根据集成的配置自动修复或格式化代码。
ESLint 为不同的代码编辑器提供了扩展插件,只需安装 ESLint 扩展,即可实时收到错误通知。要查看支持的代码编辑器列表,请访问 ESLint Integrations 页面。
安装
你可以通过 npm 全局安装 ESLint:
$ npm i -g eslint
然后运行 init 命令,为你的项目初始化 ESLint 配置。注意:你需要在包含目标项目的目录中运行 init 命令。
$ eslint --init
运行 --init 时,ESLint 会向你提出一系列问题,以创建适合你项目的配置文件。你只需根据项目实际使用的技术栈进行回答即可。随后,ESLint 将生成一个 .eslintrc.js 文件,其中包含该项目所使用的 ESLint 配置。(注意:如果你选择 JSON 或 YAML 格式的配置,ESLint 将生成相应的配置文件。)
运行 --init 后生成的默认配置如下所示:
module.exports = {
"env": {
"browser": true,
"es2021": true
},
"extends": "eslint:recommended",
"overrides": [
],
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"rules": {
}
}
基本用法
运行 Lint 的基本语法如下:
$ eslint [options] [file|dir|glob]*
例如,对 index.js 文件运行 Lint:
$ eslint index.js
ESLint 会自动在项目中查找 .eslintrc 配置文件,并根据该配置执行 Lint 检查。你也可以通过命令行指定 ESLint 使用的配置文件。
假设你的所有代码都在 /src 目录下,并希望对整个项目运行 Lint:
$ eslint src
但如果你只想对 .js 文件运行 Lint,并忽略 src/dist 目录中的文件:
$ eslint src --ignore-pattern 'src/dist' --ext .js
还有许多其他有用的 CLI 命令,你可以参考 ESLint 官方文档。
ESLint 还可以自动修复代码违规问题,只需添加 --fix 参数:
# 修复违规项但不保存更改
$ eslint src --fix-dry-run
# 修复违规项并保存更改
$ eslint src --fix
ESLint 规则
如前所述,ESLint 提供了一套规则,你可以为项目进行配置。完整的规则列表请参见 ESLint Rules。
在配置文件中设置规则非常简单,只需在 "rules" 部分添加一个属性,并赋予以下值之一:
"off"或0—— 关闭该规则"warn"或1—— 以警告模式启用该规则"error"或2—— 以错误模式启用该规则
例如,如果我希望在每次运行 Lint 时,对 no-extra-semi 规则启用错误模式,可以这样配置:
...
"rules": {
"no-extra-semi": "error"
}
...
推荐的规则集
ESLint 提供了大量规则,而选择哪些规则应用到项目中可能既耗时又费力。因此,社区已经创建了许多现成的规则集。
其中最著名的包括 Airbnb 和 Google 的规则集:
使用它们非常简单:只需在开发依赖中安装对应的包(使用 --save-dev),然后在 ESLint 配置文件中声明你想使用的配置名称即可。
...
"extends": "google",
// 或
"extends": "airbnb",
...
Airbnb 和 Google 都在其官方文档(Airbnb Style Guide 或 Google Style Guide)中清晰地描述了如何使用其规则集以及具体应用了哪些规则。
此外,你也可以直接使用 ESLint 官方推荐的规则集,只需设置:
"extends": "eslint:recommended"
与 Git Hook 集成
为了在整个项目中建立一致的代码风格,你需要防止因疏忽、故意或忘记运行 Lint 而导致的“推送”不良代码的行为。通过与 Git Hook 集成,你可以有效阻止此类提交。
总结
ESLint 是一个高效分析和修改 JavaScript 代码的工具,有助于在项目中保持一致的代码风格。将 ESLint 应用于项目非常简单,同时它还为众多代码编辑器和 IDE 提供了集成扩展,使你的开发工作更加便捷。