上周,技术指导委员会 (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 升级时遇到的问题。