Rush Stack商店博客活动
跳至主要内容

ESlint / TSLint 插件

插件包@rushstack/heft-lint-plugin
插件名称lint-pluginLintPlugin.ts 实现
插件配置文件(无)
heft.json 选项(无)

此插件调用 ESLintTSLint linter,它们检查您的代码是否存在样式问题和常见错误。

何时使用它

TSLint 已弃用(见下文)。我们建议在所有项目中使用 ESLint,作为以下代码验证组合方法的一部分

  • Prettier:此工具管理诸如空格、逗号和分号之类的琐碎语法方面。由于这些方面通常不会影响代码语义,因此我们不会用有关它的错误消息打扰开发人员,它也不属于构建的一部分。相反,Prettier 通过 git commit 钩子自动重新格式化代码。要进行设置,请参阅 Rush 网站上的 启用 Prettier 教程。

  • TypeScript:TypeScript 编译器执行复杂的类型检查和语义分析,这是程序正确性的最重要的保障措施。

  • ESLint:lint 规则用额外的样式规则补充编译器的检查,这些规则更主观并且高度可定制。虽然 TypeScript 可能会检测到“此函数参数是字符串,但被声明为数字”,但 linter 可能会检测到一个问题,例如“此类名应使用 PascalCase 而不是 camelCase。” 但是从操作上讲,ESLint 的验证与类型检查非常相似,一些 ESLint 规则需要 TypeScript 语义分析,这可能取决于特定于项目的编译器配置。因此,我们建议在构建过程中运行 ESLint,而不是作为 Git 提交钩子或全局分析。

  • API 提取器:这是仅针对库包的额外验证检查。它确保它们的 API 合同格式良好且已正确记录。

虽然建议以这种方式设置构建系统,但 Heft 不会强制使用特定的方法。这些组件中的每一个都是可选的,并且可能存在其他配置。例如,较旧的代码库可能需要使用 TSLint 而不是 ESLint。

package.json 依赖项

您需要将 eslint 包添加到您的项目中

# If you are using Rush, run this shell command in your project folder:
rush add --package eslint --dev

如果您使用的是 rig,则可以省略 eslint 依赖项并通过 rig 解析 获取它。但是,如果您使用的是 VS Code 的 ESLint 扩展,它将尝试从您的项目文件夹中解析 eslint 包。因此,将 ESLint 添加到您的 package.json 文件中仍然很有用。(扩展程序能够加载全局安装的 eslint 包;但是,它的版本可能与本地分支所需的版本不匹配。)

如果您使用的是标准 rig,例如 @rushstack/heft-node-rig@rushstack/heft-web-rig,那么 @rushstack/heft-lint-plugin 已经加载并配置好了。

否则,您需要将包添加到您的项目中

# If you are using Rush, run this shell command in your project folder:
rush add --package @rushstack/heft-lint-plugin --dev

配置

如果插件没有由 rig 提供,您的 heft.json 配置文件 可以像此示例一样调用它

<项目文件夹>/config/heft.json

{
"$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json",
. . .
"phasesByName": {
"build": {
"cleanFiles": [{ "sourcePath": "dist" }, { "sourcePath": "lib" }, { "sourcePath": "lib-commonjs" }],
"tasksByName": {
"typescript": {
"taskPlugin": {
"pluginPackage": "@rushstack/heft-typescript-plugin"
}
},
"lint": {
"taskDependencies": ["typescript"],
"taskPlugin": {
"pluginPackage": "@rushstack/heft-lint-plugin"
}
}
}
}
. . .
}
}

Heft 仅在找到 ESLint 配置文件时才调用 linter。虽然 ESLint 支持 7 种不同的 文件名称/格式,但 Heft 要求它被命名为 ".eslintrc.js"。这样做有几个好处

  • 一致性:使用一个标准名称 ".eslintrc.js" 使得搜索这些文件、执行批量编辑以及在项目之间复制配置配方变得容易。
  • 解决方法:使用 .js 文件扩展名可以在文件中启用 JavaScript 表达式。这种做法通常不鼓励,因为代码表达式更难验证,并且表达式可能依赖于对缓存不可见的环境输入。但是,由于历史原因,ESLint 的配置文件格式存在一些限制,这些限制只能通过脚本解决(例如使用 __dirname 来解析文件路径)。

不建议在 monorepo 根文件夹中放置一个集中的 .eslintrc.js。这违反了 Rush 的原则,即项目应该独立并且可以轻松地在 monorepo 之间移动。

相反,每个项目都应该有自己的 .eslintrc.js 文件。我们建议使用 @rushstack/eslint-config 共享配置,它专门针对大型 monorepo 定制,并基于 typescript-eslint 解析器和规则集。如果您需要额外的自定义 lint 规则,建议创建一个从 @rushstack/eslint-config 扩展的自定义 NPM 包。

使用这种方法,典型的 ESLint 配置文件将具有非常少的样板。例如

<项目文件夹>/.eslintrc.js

// This is a workaround for https://github.com/eslint/eslint/issues/3458
require('@rushstack/eslint-config/patch/modern-module-resolution');

module.exports = {
extends: ['@rushstack/eslint-config/profile/node'],
parserOptions: { tsconfigRootDir: __dirname }
};

配置文件和混入

@rushstack/eslint-config 包目前提供三种不同的 lint 配置文件。选择一个

  • @rushstack/eslint-config/profile/node - 用于 Node.js 服务
  • @rushstack/eslint-config/profile/node-trusted-tool - 用于 Node.js 工具
  • @rushstack/eslint-config/profile/web-app - 用于 Web 浏览器应用程序

它还支持 lint 混入。添加尽可能多的混入

  • @rushstack/eslint-config/mixins/react - 如果你使用的是 React 框架
  • @rushstack/eslint-config/mixins/friendly-locals - 如果你更喜欢更详细的声明来使
  • @rushstack/eslint-config/mixins/tsdoc - 如果你在工作区中使用 API 提取器

@rushstack/eslint-config 文档 更详细地解释了这些选项。

TSLint

TSLint 工具早于 ESLint 并且现在已弃用,但可能仍存在于一些较旧的代码库中。

lint-plugin 支持两种工具:如果找到 <project folder>/tslint.json,则将调用 TSLint。如果两个配置文件都存在,则将调用 TSLint 和 ESLint。