• Node.js 技术指导委员会已决定停止在未来版本的 Node.js 中分发Corepack
  • 发布于 1个月前
  • 87 热度
    0 评论
Node.js 技术指导委员会(TSC)已正式投票决定停止在未来版本的 Node.js 中分发 Corepack。

这项通过加密投票做出的决定将影响未来的 Node.js 版本(即25+),尽管 Corepack 将在 Node.js 24 及更早版本中作为实验性功能保留。

Corepack 在 Node.js 中的角色
Corepack 在 Node.js 16.9.0 版本中被引入,作为连接不同包管理器的实验性工具。它提供了一种方式,让用户可以直接通过 Node.js 安装和管理 Yarn 和 pnpm 等包管理器,而无需单独安装它们。这使得项目可以更容易地强制使用特定的包管理器版本,而不需要开发人员手动安装它。然而,尽管它具有潜力,Corepack 还是面临了几个障碍。许多开发人员不知道它的存在或误解了它的目的,导致采用困难。此外,它与 Node.js 分发的集成受到质疑,因为包管理器通常独立于运行时运行。

Corepack 移除的过程
关于移除 Corepack 的讨论已经持续了数年。2023年11月,有人提议默认启用 Corepack,在 Node.js 社区内引发了辩论。2024年2月,讨论加剧,特别是围绕 Corepack 可能被用作将 npm 与 Node.js 发布解耦的方式的担忧。到3月,TSC 澄清没有计划从 Node.js 分发中移除 npm,但 Corepack 的未来仍不确定。

TSC 将与 Corepack 相关的决定委托给包维护工作组(PMWG),该工作组随后概述了移除 Corepack 的路线图。关键步骤包括:
.修改 Node.js 下载页面,强调像 nvm 和 fnm 这样的版本管理器。
.将 Corepack 的文档从 Node.js API 文档中移出,并放入其自己的存储库中。
.从下一个主要版本开始,从 Node.js 分发中移除 Corepack。
路线图在 PMWG 内部获得了强烈支持,为最终确认移除 Corepack 的投票铺平了道路。

为什么要移除 Corepack?
TSC 投票反映了一种偏好,即逐步淘汰 Corepack,而不是将其与 Node.js 一起捆绑。获胜的提案——"稍后逐步淘汰"——确保 Corepack 将不再与未来的 Node.js 版本一起分发,同时在 Node.js 24 中作为实验性功能保留。其他提案,包括将 Corepack 保留在 Node.js 中但默认禁用,未能获得足够的支持。

决定的主要原因:
缺乏广泛采用:许多开发人员和团队继续使用他们首选的包管理器安装,完全绕过 Corepack。
分发问题:Corepack 包含在 Node.js 二进制文件中被视为不必要地捆绑了一个可以单独安装的工具。
长期维护:从 Node.js 分发中移除 Corepack 允许包管理器独立发展,而不需要在 Node.js 本身中进行更改。

社区的反应
移除 Corepack 的决定引起了不同的反应。一些开发人员认为这是简化 Node.js 的必要步骤,而其他人则认为这是一种倒退。对于那些因性能和可靠性问题而避免使用 npm 的人来说,Corepack 特别有用。

"我一直通过 Corepack 专门使用 pnpm,"一位开发人员在去年提议移除它时评论道。"强制人们使用 npm 来安装他们实际想要使用的包管理器是一个可怕的倒退。"
其他人,包括 Node.js 维护者,认为 Corepack 从来就不是运行时的永久部分,单独维护更好。

接下来会发生什么?
虽然 Corepack 将不再与未来版本的 Node.js 捆绑在一起,但它仍将作为单独的安装提供。依赖 Corepack 功能的开发人员将需要手动安装它:
npm install -g corepack
对于使用 Corepack 管理包管理器的项目,更新文档和工作流程将是必要的,以确保平稳过渡。需要澄清的是,投票不会定义 Corepack 的弃用状态——只是从 Node.js 分发中移除它。目前没有计划弃用 Corepack,只要 Node.js 24.x 没有结束生命周期(EOL),它就将继续得到维护。

历史背景:Node.js 和包管理器
这一决定让人想起了 Node.js 生态系统中过去关于什么应该或不应该包含在核心分发中的辩论。类似的讨论围绕捆绑的依赖项如 npm 产生,npm 历来与 Node.js 一起发布,但已经经历了重大变化,包括引入 Yarn 和 pnpm 等替代包管理器。移除 Corepack 标志着向更精简的 Node.js 分发转变,强化了包管理器应该与运行时本身保持解耦的理念。这一举措与其他生态系统的趋势一致,在这些生态系统中,运行时专注于核心功能,而包管理器独立运行。

对于开发人员来说,关键的启示是为 Corepack 的移除做好准备,确保他们的工作流程不依赖于它在未来 Node.js 版本中预先安装。
用户评论