eslint 支持多线程并发 Lint

💡 原文中文,约3300字,阅读约需8分钟。
📝

内容提要

ESLint 于 2025 年合并了多线程 linting 功能,解决了十年来的性能问题,使大型项目的 lint 速度提升超过 30%。新增的 concurrency 属性默认关闭,需谨慎使用以避免增加开销。

🎯

关键要点

  • ESLint 于 2025 年合并了多线程 linting 功能,解决了十年来的性能问题。

  • 新增的 concurrency 属性默认关闭,需谨慎使用以避免增加开销。

  • 多线程可以让 ESLint 在大型项目多个文件的速度提升超过 30%。

  • ESLint CLI 新增 concurrency 参数,可以设置为 off、auto 和一个数字。

  • 当前 ESLint 版本 9.33.0 尚未包含该 PR,预计下个版本 9.34.0 将包含此改动。

  • 配置 concurrency: auto 时,会考虑容器限制并获取最大并行度。

  • worker 线程的创建和管理通过 node:worker_threads 模块实现。

  • 多线程的开销可能会增加 Lint 时长,因此不应随意开启。

延伸问答

ESLint 的多线程 linting 功能有什么优势?

多线程 linting 功能可以使 ESLint 在大型项目中多个文件的 lint 速度提升超过 30%。

如何配置 ESLint 的 concurrency 属性?

concurrency 属性可以设置为 off、auto 或一个数字,默认值为 off。

使用多线程 linting 时需要注意什么?

需要谨慎使用多线程,因为它可能增加 Lint 的开销,导致 lint 时长增加。

ESLint 的最新版本包含多线程功能吗?

截至目前,ESLint 版本 9.33.0 尚未包含多线程功能,预计下个版本 9.34.0 将包含此改动。

如何在 ESLint 中设置最大并行度?

当配置 concurrency: auto 时,ESLint 会使用 os.availableParallelism() 方法获取最大并行度,并考虑容器限制。

多线程 linting 的开销主要来自哪里?

多线程的开销主要来自于创建和销毁 worker 以及进程间通信等。

➡️

继续阅读