npm v12 即将推出的破坏性变更
所有权、Microsoft 与信任
- 许多评论者对 npm 归 GitHub/Microsoft 所有感到惊讶或不满;也有人指出,自 2020 年以来一直如此,而且在那之前 npm “很糟”。
- 关于 Microsoft 是否真的改变了,还是在重复“拥抱、扩展、消灭”的模式展开争论;有些人认为 GitHub/VS Code 是务实之举,另一些人则认为这是锁定用户和“开源洗白”。
- 围绕 npm 收购以及后来 GitHub 转向 AI 的裁员,被拿来作为公司优先级高于生态健康的证据。
npm v12 核心变化(allowScripts、postinstall)
- 主要变化是:安装脚本(例如
postinstall)默认被禁用,必须显式允许(在 config/package.json 中使用allowScripts)。 - 这让 npm 更接近 pnpm,并增加了按包白名单机制,包括固定版本的允许列表。
- 原生模块作者以及通过 npm 分发二进制文件的人询问这会如何影响他们的工作流;回答显示所有安装脚本默认关闭,但现有模式(os/cpu/optionalDependencies)仍然可用。
安全影响与剩余风险
- 许多人认为这是一次重大的安全提升:它消除了常见的供应链攻击向量,尤其适用于那些纯前端包,因为这些代码从不在服务端运行。
- 怀疑者认为恶意代码可以从安装脚本转移到模块运行时代码、测试或构建工具中,因此攻击面被缩小了,但没有被消除。
- 有人指出,这个修复解决的是大约 10 年前报告的一处漏洞,而且直到多起高调利用事件之后才落地,包括影响 Microsoft 自身的事件。
更强防御的提议
- 提出的建议包括:
- 新发布在可安装前设置延迟期(例如默认 1 天)。
- 发布者必须启用强制 2FA 或更强身份验证(政府 ID + 智能手机确认)。
- 更像 Debian 的分阶段仓库,配合人工 QA 和付费企业支持。
- 沙箱、模拟运行,以及更好的来源证明/权限控制(其中 Deno 被引用为更强的模型)。
生态系统对比(pnpm、yarn、其他)
- 一些评论者表示 npm “基本上已经是 pnpm 了”,但 pnpm 被认为更快、占用空间更少,而且类似的保护措施早已默认开启。
- 据称 Yarn 也具有相近的安全性和性能,并提供 Plug’n’Play 等特性;一些团队因生态摩擦迁移到了 pnpm。
- Deno 和 Node 自身的权限系统被讨论为更有原则的运行时隔离方式,不过 Node 的默认设置遭到批评。
其他反应
- 对这项变更的看法不一:从“终于来了”和“天啊,够了,已经太迟了”到“毫无意义”和“只是转移责任”。
- 对 GitHub 红色“RETIRED”徽章以及术语混乱的 UI 抱怨。
- 普遍情绪是:总比没有好,但来得太晚,而且在仍然脆弱的 JS 供应链中,这也只是一步而已。