UNPKG

rerumaccusamus

Version:

The meta-framework suite designed from scratch for frontend-focused modern web development.

148 lines (100 loc) 5.87 kB
--- sidebar_position: 1 --- # ESLint 全量规则集 <!-- 参考 [实战教程 - 确认编程环境](../handbook/c03-ide/3.1-setting-up) 确保本地 IDE 环境正常。 --> **Modern.js ESLint 规则集**是全量的 **ESLint** 规则集合,包含 `@modern-js` (对于 Node.js 项目的 Lint 规则)和 `@modern-js-app`(对于前端项目的 Lint 规则)。 下面以具体问题介绍更多 ESLint 用法。 ## Q: 如何处理 Lint ### 实时自动修复 多数问题会被 ESLint 规则的自动修复功能或 [Prettier](https://prettier.io/) 的代码格式化功能(已被集成到 ESLint 里)自动解决,开发者不需要关心问题的细节和解决方式。 :::note 注 主要在 IDE 保存文件的环节执行这种自动修复,少数漏网之鱼会在提交代码环节被自动修复。 :::note 注 ### 批量自动修复 在少数情况下,比如旧项目迁移的时候,可以执行以下命令,批量修复和检查所有文件: ```bash pnpm run lint:error ``` ### 人工修复 对于无法自动修复的问题,可以在 IDE 里点击问题提示框里的规则链接,打开这条规则的文档,查看问题的解释和解决方案。 ### 声明例外情况 目前阶段,有些规则并不能做到足够智能,多数情况下会有很大收益,在少数情况下也许不适用。但如果为了这些少数情况就把整个规则关掉或改掉,得不偿失。 这种情况下可以用 [eslint-disable](https://eslint.org/docs/user-guide/configuring/rules#disabling-rules) 注释,对符合**少数情况**的代码块做标注,声明这里是一个例外,应该忽略。比如: ```js /* eslint-disable filenames/match-exported */ ... /* eslint-enable filenames/match-exported */ ``` :::note 注 在 VSCode 编辑器里输入 eslint,会自动出现关于 "eslint-disable" 的提示框,选择提示选项生成对应注释对。 ::: 【Modern.js ESLint 规则集】要求 [eslint-disable](https://eslint.org/docs/user-guide/configuring/rules#disabling-rules) 必须成对使用,必须明确表达要影响的范围,以及在这个范围内明确表达要禁用什么规则,目的是让**例外**有明确的、最小化的范围,避免 [eslint-disable](https://eslint.org/docs/user-guide/configuring/rules#disabling-rules) 被滥用,导致不属于例外的代码也被禁用了规则。 ### 添加自定义配置 <!-- 见 [如何自定义 Lint 规则](/guide/more-guides/more-about-lint#q-如何自定义-lint-规则) --> ## Q: 如何自定义 ESLint 规则 ### 仓库根目录下 `package.json` 里的 "eslintConfig" 字段 这个地方是整个仓库的默认 ESLint 配置,是针对纯 Node.js 代码(只能在 Node.js 里运行)设计的。 如果项目在某些规则上确实有特殊要求或不可避免的兼容问题(不是例外),可以在这里增加规则配置。该配置会优先于默认的【Modern.js ESLint 规则集】,比如: ```json "eslintConfig": { "extends": [ "@modern-js" ], "rules": { "filenames/match-exported": "off" } }, ``` ### `src/.eslintrc.json` 文件 Modern.js 的 MWA 项目、模块项目,源代码目录里都会默认有这个配置文件,是针对 Universal JS 代码设计的。 :::note 注 Universal JS 代码是既能浏览器端也能在服务器端运行的代码。 ::: 如果项目在某些规则上确实有特殊要求或不可避免的兼容问题(不是例外),可以在这里增加规则配置,该配置会优先于默认的【Modern.js ESLint 规则集】,比如: ```json { "extends": [ "@modern-js-app" ], "rules": { "filenames/match-exported": "off" } } ``` 如果有需要,还可以继续在不同的子目录里增加 `.eslintrc.json` 文件,针对这个子目录里的代码做特殊配置: ```json { "rules": { "filenames/match-exported": "off" } } ``` :::tip 提示 注意:没有必要使用 `extends` 字段,会自动继承父目录的配置。 ::: ### package.json 里的 `eslintIgnore` 字段 把包含 `.js``.jsx``.ts``.tsx` 文件、但不需要做代码检查和自动修复的目录,添加到 `eslintIgnore` 里,可以优化 ESLint 检查的速度,比如: ```json "eslintIgnore": [ "node_modules", "dist", "output" ], ``` ## Q: 如何升级 ESLint 插件的版本 只要不是 Major 版本的变化(不符合 [Semver](https://semver.org/) 规则的 `^` 符号),就可以直接在业务项目的 `package.json` 里指定这个依赖,删除 Lock 文件(或尝试手动删除 Lock 文件中这个包名的内容),执行 `pnpm install` 重新安装依赖并且生成新的 Lock 文件。 做完这些操作之后,在业务项目的 `./node_modules` 目录里,这个插件应该只存在一份,并且升级到了你指定的版本。 :::tip 提示 - Major 版本就是主版本号。更多信息,请阅读【[Semantic Versioning](https://semver.org/#summary)】。 - 所有被 Modern.js 封装的上游项目(比如 ESLint、[ESLint 插件](https://eslint.org/docs/user-guide/configuring/plugins#plugins)、[React Router](https://reactrouter.com/) 等),也都可以这样升级。 - Modern.js 也会在每次发版中尽量及时的升级这些上游依赖。 - Major 版本的升级需要由 Modern.js 来发版。 ::: ## Q: WebStorm 有时候会报 ESLint 错误 由于 WebStorm 认为 ESLint 执行目录是根据 `.eslintrc` 文件来决定的。因此 `src/.eslintrc` 文件位置的放置会导致 `tsconfig.json` 文件指定的位置(项目根目录下)在 `src/` 目录下找不到。 此时需要手动配置一下: ```json --parser-options=project:../tsconfig.json ``` ![webstorm-lint-error](https://lf3-static.bytednsdoc.com/obj/eden-cn/aphqeh7uhohpquloj/modern-js/docs/webstorm-lint-error.png)