🚑 Eslint 周边
!本篇文章过于久远,其中观点和内容可能已经不准确,请见谅!~
想分享的是让你知道 ESLint 的简单背景和用法,以及知道 ESLint 怎么在项目中发挥作用的。
顾名思义
ECMAScript Linter
就是一个 ES 规范的检查器,负责检查代码语法/风格/错误。在天地初开之时,JS 依靠语法宽松、动态运行的特点更容易低门槛实现业务获得青睐,但也是因此很多语法和逻辑错误无法在静态检查阶段被发现,于是 JSLint 语法检查器出世,能够满足基本的代码静态检查需求,但是扩展性差几乎不可配置,后来在此基础上又 fork 出了 JSHint,很长时间内这两个工具和相关生态支持了最开始的代码检查需求,毕竟当事的 ES 版本稳定不变了很长一段时间。随着时代的发展,更加好用容易配置的 eslint 采用 ast 等功能在 es5 的时代大放异彩,比如 babel-eslint,一个插件就支持了更高级的语法。
最开始的需求是在代码上线之前检查出代码中的语法错误问题、编码问题还有一些代码风格问题。后面有编辑器的支持就可以在编码的过程中实时的提示语法问题。再后来可以在团队协作时提前强制检查错误和风格。到现在无论是个人还是团队作为必选功能集成在项目中。
ESlint 得以流行的很重要原因是灵活的可配置项,包括 plugins 扩展、继承、解析器、和细致可配置的规则等强大功能。
在工作文件夹下执行:
yarn add eslint --dev
初始化一个最简单的配置文件:
npx eslint --init
此处就会问是要
check syntax, find problems, and enforce code style
的三个功能,这个也是整个 ESLint 的全部目的。再新建一个示例文件:
// demo.jsfunction add(a, b) {return a + b;}console.log(add(1, 1));
运行检查:
eslint demo.js
/workspace/demo.js/Users/ubug/codes/kitu-demos/eslint/demo.js2:1 error Expected indentation of 4 spaces but found 2 indent2:15 error Extra semicolon semi5:1 error Unexpected console statement no-console5:23 error Extra semicolon semi✖ 4 problems (4 errors, 0 warnings)3 errors and 0 warnings potentially fixable with the `--fix` option.
语法没问题,但是有 4 个错误,3个可以自动修复。分别是
indent
、semi
、no-console
三个错误,按照说明来看其中 indent
、semi
是样式问题,而 no-console
是严格的代码问题。团队协作工作中,代码规范越来越举足轻重,保持同样的代码风格,降低基本错误的出现等都是协作的基础,非常的依赖类似 ESlint 这样的工具完成这些个目标,所以在团队中使用 ESlint 的方案还是很重要的,不过团队的使用定制和个人的定制深度不同,团队的配置更倾向于严格,个人的更习惯稍稍宽松,加上自己的偏好。
npx eslint --init
在简单的个人项目中足够使用了,但是对于想深入定制的需求,规则和插件生态非常丰富的今天,这样的定制很耗费精力,好在业内已经完成了比较成熟的预设方案,比如比较早的 Airbnb
、Google
定制的一套规范,包括 ESlint 推荐的 Standard
、Recommanded
等。除此之外还有其他很多框架、公司也都有定制的规范,用法基本大同小异,推荐个人根据喜好做一个方案可以方便很多自己的小项目。常见的是使用较强检查的 airbnb 或者 standard 进行语法检查,搭配 Prettier 限制一些团队特有的习惯限制,然后配合 Husky 或者 pre-commit 加上 lint-staged 实现提交前强制检查。
standard
例子:yarn add --dev eslint-config-standard eslint-plugin-standard
module.exports = {"extends": ["standard"],"plugins": ["standard"],}
上面说的
Airbnb
、Standard
、Recommanded
等是比较完整的语法检查,代码规范,格式化,但是 Prettier
是比较特殊的一个,它只负责代码的格式化。一方面
Prettier
有独立的包,可以独立执行代码的格式化,不依赖 ESLint
。另一方面可以以插件的形式在 ESlint
中存在,代替 ESlint
中的格式化的功能。所以 Prettier 是一个只负责代码格式化的工具,语法配置相关的规则不会涉及,所以也可以和 Airbnb 一起使用。
ESLint
繁多的规则,初始化的时候也会提示 To check syntax, find problems, and enforce code style
,所以功能分为 语法检查(a=;)、问题发现(不允许使用 console,但是检测到了 console) 和 代码格式化(空格缩进数) 三个功能。“代码格式化” 就是 Prettier
要覆盖和拓展的。禁用prettier冲突的规则:
yarn add --dev eslint-config-prettier
module.exports = {"extends": ["prettier"]}
用 eslint 接管 prettier 的运行:
yarn add --dev eslint-plugin-prettier
module.exports = {"extends": ["prettier"],"plugins": ["prettier"],}
TypeScript
和 ECMAScript
相比可以算是不同的语言了,解析是不同的,刚开始 Typescript
使用自己的 tslint
来实现这个功能,但是随着发展和定制化要求越来越高,目前官方已经放弃了 tslint
,转而实现相关的 ESlint
生态,这其实是更好的选择。yarn add --dev @typescript-eslint
module.exports = {"parser": "@typescript-eslint/parser","plugins": ["@typescript-eslint"],};
如果你在项目根目录下面创建了
.eslintrc
,然后安装 eslint
的插件,编辑器会提供语法、错误和格式化的提示,从这个用处来说也不用安装依赖了?安装依赖与编辑器插件的区别:
- 安装编辑器插件,能根据项目配置文件,实现编辑器实时的代码检查、风格格式化等功能,但是去除插件或者更换编辑器这些功能就丢失了,毕竟是插件提供的功能。
- 安装依赖,根据 npm 脚本设置,可以用 githook 或者手动运行的方式在命令行运行,不依托于编辑器,但是并不能提供编辑器界面上的提示。
ESLint 配置文件生效优先级为
.eslintrc.js > .eslintrc.yaml > .eslintrc.yml > .eslintrc.json > .eslintrc > package.json
具体用法不聊,一篇官方文档即可完整说明全部的配置: Configuring ESLint,或者 中文网站 。
一个常见的配置文件如下:
{"extends": "eslint:recommended","parserOptions": {"ecmaVersion": 6,"sourceType": "module","ecmaFeatures": {"jsx": true}},"env": {"browser": true,"node": true},"plugins": ["import","node","promise","standard"],"globals": {"document": "readonly","navigator": "readonly","window": "readonly"},"rules": {"semi": 2},}
感谢您的阅读,本文由 Ubug 版权所有。如若转载,请注明出处:Ubug(https://ubug.io/blog/eslint)