ESLint v8.x 已于 2024年10月5日停止维护。请升级到最新版本或考虑长期支持选项

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 新闻、案例研究、教程和资源。

ESLint v9.14.0 released
阅读 2 分钟

ESLint v9.14.0 发布

我们刚刚发布了 ESLint v9.14.0,这是一个 ESLint 的次要版本升级。此版本添加了一些新功能并修复了先前版本中发现的一些错误。

ESLint v9.13.0 released
阅读 1 分钟

ESLint v9.13.0 发布

我们刚刚发布了 ESLint v9.13.0,这是一个 ESLint 的次要版本升级。此版本添加了一些新功能并修复了先前版本中发现的一些错误。