ESLint v7.0.0 版本的新特性

我们想与您分享 v7.0.0 版本中即将到来的重大变更,以便您更好地为这些变更做好准备,并理解这些变更的必要性。

上周,技术指导委员会 (TSC) 开会最终确定了 ESLint v7.0.0 的功能。即使 v7.0.0 的工作已经开始,此功能集尚未最终确定,因此这代表着一个重要的里程碑,使我们能够专注于发布下一个主要版本。您可以在我们的 项目看板 上查看 v7.0.0 的所有计划。

v7.0.0 中的重大变更

以下变更是重要的,以便您理解我们向 v7.0.0 过渡的过程。

放弃支持 Node.js v8.x

Node.js v8.x 已于 2019 年 12 月正式停止维护,因此 v7.0.0 移除了对此 Node.js 版本的支持。

ESLint 类取代 CLIEngine

从 ESLint 的早期开始,我们就提供了 CLIEngine 类,以便开发人员创建 ESLint 集成。此类是编辑器插件、构建工具集成和零配置代码检查器等功能的核心。CLIEngine 类为 ESLint 本身提供动力,并且多年来一直是该项目的重要组成部分。

不幸的是,CLIEngine 已成为许多新功能的主要障碍。最重要的是,由于 CLIEngine 类以同步方式工作,因此在 ESLint 核心中执行任何类型的异步操作都是不可能的。这种限制意味着诸如并行检查文件和加载 ECMAScript 模块 (ESM) 文件等功能无法实现。

在决定用新的 ESLint 类替换 CLIEngine 类之前,我们考虑了几种方法(更多详情)。ESLint 类将包含异步方法,这将作为将异步功能引入核心的起点。首先,ESLint 类将只是 CLIEngine 的一个包装器,我们将随着时间的推移系统地开始将新功能写入 ESLint 类。最终,ESLintCLIEngine 类将完全分离。

对于 v7.0.0,CLIEngine 类将被弃用但不会被移除。我们预计在未来的主要版本中移除 CLIEngine(请放心,在这样做之前我们会给您充分的通知)。

弃用特定于 Node.js/CommonJS 的规则

在核心中管理规则是 ESLint 持续维护的重要组成部分。随着项目的发展,我们维护的规则数量也在增加。我们审查了当前的所有规则,并认为特定于 Node.js/CommonJS 的规则不再适合包含在核心中。随着 Node.js 更多地转向 ESM 作为首选模块系统,情况尤其如此。

因此,以下规则将在核心中被弃用

  • callback-return
  • global-require
  • handle-callback-err
  • no-buffer-constructor
  • no-mixed-requires
  • no-new-require
  • no-path-concat
  • no-process-env
  • no-process-exit
  • no-restricted-modules

这些规则将被移动到 eslint-plugin-node 项目。我们将建议人们将来使用该插件来使用这些规则。这些规则将在 ESLint v7.0.0 中保留,并在未来的主要版本中移除。

指令注释中的描述

指令注释描述允许您为自己和其他开发人员留下注释,说明您包含该注释的原因。例如

/* eslint-disable no-new -- this class has a side-effect in the constructor. */

您可以在 RFC 中阅读更多内容。

使用 ~/.eslintrc 的警告

主目录中的配置文件已在 v6.7.0 中弃用,v7.0.0 将在使用时发出警告。长期以来,此功能一直是 ESLint 用户困惑的根源,尤其是在没有找到其他配置文件时,ESLint 才会在主目录中查找配置文件。自引入主目录配置文件以来,ESLint 中的配置系统发生了很大变化,并且凭借额外的灵活性,我们认为有很多其他配置 ESLint 的选项比主目录配置文件更清晰。

对主目录配置文件的支持将在 v8.0.0 中移除。您可以在 RFC 中阅读更多内容。

使用 --config--ignore-path 时更新基础路径

在 v7.0.0 之前的版本中,ESLint 会解析配置文件或相对于传递给 --config--ignore-path 的文件位置的忽略文件中的引用。这没有多大意义,并且是用户困惑和意外行为的根源。在 v7.0.0 中,使用 --config--ignore-path 传递的配置文件和忽略文件使用当前工作目录作为其基础路径。您可以在 RFC 中阅读更多内容。

从配置文件目录加载插件

在 v7.0.0 中,插件将相对于引用它们的配置加载。您可以在 RFC 中阅读更多内容。

配置文件中的文件扩展名

ESLint v7.0.0 现在读取配置文件的 overrides 部分中的 glob 模式,以确定要检查哪些文件。在 v7.0.0 之前,您需要提供 --ext 命令行标志来指定要检查的其他文件。您可以在 RFC 中阅读更多内容。

更新了默认忽略模式

除了当前的默认值之外,ESLint 的默认忽略模式将更改为

  • 取消忽略 .eslintrc.js
  • 取消忽略 /bower_components/*
  • 忽略子目录中的 node_modules/*

您可以在 RFC 中阅读更多内容。

更严格的 RuleTester

RuleTester 类正在添加几个额外的检查,以确保规则正常工作

  • 如果规则使用非标准的 node.startnode.end 属性,则会失败,并非 ESLint 支持的所有解析器都可能提供这些属性。
  • 自动修复规则必须测试其修复的输出。
  • 代码存在语法错误的测试现在将失败。
  • 如果测试规范包含未知属性,则测试失败。

您可以在 RFC 中阅读更多内容。

安装 v7.0.0 的预览版本

如果您想在 v7.0.0 开发过程中对其进行测试,可以使用 next 标签从 npm 安装

npm i eslint@next --save-dev

预览版本会定期发布到 next 标签,直到最终的 v7.0.0 版本发布。请记住,预览版本不包含 v7.0.0 计划的所有更改,主要旨在帮助我们发现从 v6.x 升级的错误和问题。

最新的 ESLint 新闻、案例研究、教程和资源。

Evolving flat config with extends
5 分钟阅读

使用 extends 进化扁平化配置

您的 eslint.config.js 文件现在可以使用 extends 来简化您的配置。

ESLint v9.22.0 released
1 分钟阅读

ESLint v9.22.0 发布

我们刚刚推送了 ESLint v9.22.0,这是一个 ESLint 的小版本升级。此版本添加了一些新功能并修复了上一个版本中发现的几个错误。

ESLint v9.21.0 released
2 分钟阅读

ESLint v9.21.0 发布

我们刚刚推送了 ESLint v9.21.0,这是一个 ESLint 的小版本升级。此版本添加了一些新功能并修复了上一个版本中发现的几个错误。