
上周,技术指导委员会 (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
类。最终,ESLint
和 CLIEngine
类将完全分离。
对于 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.start
或node.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 升级的错误和问题。