• Node.js 技术指导委员会:Node.js 不会从发行版中移除 NPM
  • 发布于 1个月前
  • 62 热度
    0 评论
2024年03月20日,Node.js 技术指导委员会(TSC)召开会议,在关于默认启用 Corepack 的持续讨论中,与会成员已达成共识,从 Node.js 发行版中移除 npm 并不是项目的目标。

在围绕 Corepack 的讨论,之前曾提出过 npm 是否将通过 Corepack 提供的问题。因为一些贡献者认为,从 Node.js 发行版中移除 npm 是集成 Corepack 的最终目标。

上周,由 TSC 成员 Geoffrey Booth 发起的 PR 已经被合并,明确了这一共识。它指出,移除 npm 并不是项目的目标:

大致意思是:“作为解决 TSC 成员在 2024-01-24 会议上提出的要求的一部分,本 PR 旨在帮助澄清 Corepack 的目标。特别是,本 PR 明确指出,努力从 Node.js 发行版中移除 npm 并不是 Node.js 的总体目标,因此也不属于 Corepack 的目标。”

同时,该 PR 更新了 Node.js 的 "技术优先事项" 文档,新增了 "软件包管理" 部分:
The ability to easily install and manage dependencies and development tools is a key part of the user experience, and for that reason Node.js must provide a package manager as part of its distribution. Node.js includes npm for this purpose. This is for historical reasons — when npm was added in 2011, it was the only JavaScript package manager — and because it is the reference implementation for the npm registry, which is the de facto primary source for most JavaScript software. In accordance with our policy of not including multiple dependencies or tools that serve the same purpose, the Node.js project does not include any other package managers; though it may include other software to download other package managers.

大致意思是:“轻松安装和管理依赖关系和开发工具的能力是用户体验的关键部分,因此 Node.js 必须提供一个包管理器作为其发行版的一部分。为此,Node.js 包含 npm。这是出于历史原因--当 npm 于 2011 年添加时,它是唯一的 JavaScript 包管理器--也因为它是 npm 注册表的参考实现,而 npm 注册表是大多数 JavaScript 软件事实上的主要来源。根据我们的政策,Node.js 项目不包含服务于同一目的的多个依赖项或工具,也不包含任何其他软件包管理器,但可能包含用于下载其他软件包管理器的其他软件[3]。”

关于 Corepack:
Corepack 是一个实验性工具,可帮助管理包管理器的版本。它为每个支持的包管理器公开二进制代理,当被调用时,它将识别为当前项目配置的任何包管理器,如果需要透明地安装它,最后运行它而不需要明确的用户交互。

此特性简化了两个核心工作流程:
1.它简化了新贡献者的加入,因为他们不必再遵循特定于系统的安装过程,只需拥有你想要的包管理器。

2.它允许你确保团队中的每个人都将使用你想要的包管理器版本,而无需他们在每次需要进行更新时手动同步它。


快速启用 Corepack
Node.js 默认提供 npm 包管理器,Corepack 为您提供 Yarn 和 pnpm,而无需安装它们。Corepack 默认与 Node.js 16.9.0 一起分发。在大于 16.9.0 版本的 Node.js 有四个命令,分别为 corepack、node、npm、npx,相比之前版本多了个 corepack。

因为 corepack 还处于实验阶段,我们可以通过 corepack enable 快速启用 corepack。
➜  fedlab git:(main) ✗ corepack enable
➜  fedlab git:(main) ✗ pnpm -v
Corepack is about to download https://registry.npmjs.org/pnpm/-/pnpm-8.15.5.tgz.

Do you want to continue? [Y/n] y
8.15.5
➜  fedlab git:(main) ✗ yarn -v
1.22.11
Node.js 自带 Yarn 和 pnpm 减少下载时间,感兴趣的同学可以尝试一下。
用户评论