前端快讯|ESLint v9.0.0 重大更新!
近日,ESLint 官网博客更新 ESLint v9.0.0 版本发布计划。本文将带您了解 v9.0.0 中即将出现的重大变更,以便您能更好地为变更做好准备,并了解为何需要进行变更。
1.开发计划
由于计划在 v9.0.0 中进行大量的破坏性更改,ESLint 团队决定分两个阶段开发此版本。
Alpha:该版本主要包括会对现有用户造成最大干扰的更改。尽早发布这些更改将使 ESLint 团队能够尽早的收集反馈,确保一切按计划进行。 Beta:该版本由剩余任务和较小的破坏性更改组成,受影响的用户较少。
每个阶段的具体细节将在本文中列出。请注意,如果在 Alpha 阶段完成了计划在 Beta 阶段中进行的任务,那么它们将会在 Alpha 版本中发布。
在 Beta 版本验证通过后,将发布一个或多个发布候选版本,继续修复错误并处理兼容性问题。
2.v9.0.0-alpha 中的重大变更
计划在 Alpha 版本中进行以下更改,这些更改具有重大的破坏性。
2.1.扁平化配置现在是默认配置,并有一些变化
从 v9.0.0 开始,Flat config 将成为 ESLint 的默认配置格式,eslintrc 将被弃用(将在 v10.0.0 版本中移除),但仍可正常使用。要继续使用 eslintrc 配置文件,需要将 ESLINT_USE_FLAT_CONFIG 环境变量设置为 false。
该版本还将删除 flat config 中的 "eslint:recommended" 和 "eslint:all" 配置字符串。在最初版本的 flat config 中,ESLint 允许你直接将这些字符串放入配置数组,但在 v9.0.0 中,你需要使用 @eslint/js
包中的相应配置。
2.2.放弃对 Node.js < v18.18.0 和 v19.x 版本的支持
截至本文发布之时,Node.js v20.x 已是 LTS 版本,因此我们将放弃对 v18.18.0 之前的所有 Node.js 版本以及 v19.x 版本的支持。前端快讯|ESLint 计划在 v9.0.0 中放弃对 Node.js < 18 和 Node.js 19 的支持
2.3.移除除 stylish、html、json 和 json-with-meta 之外的所有格式化程序
为了减小 ESLint 的安装包大小,ESLint 团队决定从 ESLint 的核心中删除大部分格式化程序。将被删除的格式化程序有:
checkstyle compact jslint-xml junit tap unix visualstudio
如果您目前正在使用这些格式化程序,您需要安装独立的包才能在 ESLint v9.0.0 中使用它们。前端快讯|ESLint 已决定弃用核心格式化规则
2.4.移除 valid-jsdoc 和 require-jsdoc 规则
为了进一步减小 ESLint 的安装包大小,ESLint 团队决定删除 valid-jsdoc 和 require-jsdoc 规则。自从 ESLint v5.10.0 以来,这些规则已被弃用,并且删除它们可以让同时删除另一个依赖项(doctrine)。ESLint 团队推荐使用eslint-plugin-jsdoc 插件代替。
2.5.移除 context 和 SourceCode 中的废弃方法
将从 context 中移除大量已废弃的方法,并用SourceCode上的方法来替换它们。此外,我们还将删除已弃用的SourceCode#getComments()方法。
2.6.更新 eslint:recommended 配置
eslint:recommended 配置将更新,包括 ESLint 团队认为重要的新规则,并删除已弃用的规则。
2.7.规则编写方式的更改
为了整理并使规则更易于使用,ESLint 团队进行了两个更改:
Function-style 规则在 v9.0.0 中将停止工作。Function-style规则是通过从文件中导出一个函数而不是导出一个具有create() 方法的对象创建的规则。 当规则没有指定 meta.schema 时,将应用默认模式[]。这意味着没有指定模式的规则将被认为没有选项,这反过来意味着如果提供了选项,则验证将失败。
2.8.--quiet 选项的性能更好
--quiet 选项会在 ESLint 控制台中隐藏所有警告。在 v9.0.0,我们也不执行任何设置为 "警告 "的规则,从而提高了性能。
2.9.在没有文件参数的情况下运行 eslint
从 v9.0.0 开始,如果您使用的是扁平化配置,并且在 CLI 中没有传递任何文件参数,则 CLI 将默认对当前目录进行代码检查,这意味着您可以键入 npx eslint 而不传递任何参数,它将正常工作。对于 eslintrc,缺少文件参数将导致错误。
3.v9.0.0-beta中的重大更改
Beta 版计划进行以下更改,这些更改具有重大的破坏性。
3.1.移除 CodePath#currentSegments
为了推进语言插件工作,将移除 CodePath#currentSegments。这仅影响使用代码路径分析的规则。
3.2.只有包含严重性的配置注释才会覆盖严重性
由于内联配置 /*eslint no-undef: warn */ 这样的注释将自动删除配置文件中相应规则的任何设定选项。在v9.0.0中,这类注释将仅更改规则的严重性,不会影响其他选项。
3.3.新的 no-new-native-nonconstructor 规则替换了 no-new-symbol
no-new-symbol 规则旨在防止在您的代码中使用 new Symbol(),因为 Symbol 不是构造函数。还有其他一些全局函数也没有构造函数,因此我们决定创建一个新规则 no-new-native-nonconstructor,来涵盖所有这些情况。这个新规则将被添加到eslint:recommended 中,no-new-symbol 将被弃用。
3.4.对 RuleTester 的更改
RuleTester 类将进行更新,以检测更多规则问题:
如果多个建议修复程序具有相同的消息,将发生失败。 如果一个建议包含解析错误,将发生失败。 将添加几个额外的断言来捕获无效或有错误的测试用例。
4.ESLint v9.0.0 预计发布时间
ESLint 团队预计 ESLint v9.0.0 的第一个 Alpha 版本将于 12 月或 1月 发布,具体取决于他们在任务上的进展。到那时,团队将收集社区的反馈并解决任何使人们难以升级的未解决问题。团队希望在 Alpha 版本发布几个月后发布 Beta 版本,并在此之后的几个月发布最终版本。所有版本的可用性将在官方博客、官推上公布,请大家密切关注!
大家都在看