← 返回信息流
AI 资讯Hacker News·3 小时前

NPM v12即将发布重大变更

原标题:Upcoming breaking changes for NPM v12

速览

NPM v12即将发布,此次更新包含多项重大变更。这些变更旨在优化包管理器的性能和安全性。开发者需提前关注相关文档以适配新版本。

AI 深度解读

npm v12 重大变更深度解读:安全默认值与显式授权机制

背景

npm 作为 JavaScript 生态系统的核心包管理器,其默认行为直接关系到数百万开发者及企业的安全基线。npm 团队宣布,下一个主要版本 npm v12 将引入一系列与 npm install 相关的安全相关默认值变更

预计 npm v12 将于 2026 年 7 月 发布。为了帮助社区平稳过渡,所有上述变更目前已在 npm v11.16.0 或更高版本中通过警告信息(warnings)的形式提供预览。这意味着开发者可以在升级至 v12 之前,利用当前版本提前识别风险并进行配置调整。

本次变更的核心逻辑是:将当前 npm install 中自动执行的行为,转变为需要用户显式选择加入(opt-in)的行为。

核心内容

npm v12 主要涉及三项关键配置的默认值收紧,旨在阻断潜在的攻击面。以下是各项变更的详细解读:

1. allowScripts 默认值设为 off

这是影响范围最广的一项变更。在 npm v12 中,npm install 将不再自动执行来自依赖项的 preinstallinstallpostinstall 脚本,除非这些脚本在你的项目中被显式允许。

  • 涵盖范围

    • 原生构建:包括 node-gyp 构建。即使一个包没有显式的 install 脚本,但如果它包含 binding.gyp 文件,npm 仍会为其隐式运行 node-gyp rebuild。在 v12 中,这类隐式构建也将被阻止。
    • Git/文件/链接依赖:来自 Git 仓库、本地文件或符号链接的依赖项中的 prepare 脚本,也将受到同样的限制。
  • 迁移与配置流程

    1. 审查:运行 npm approve-scripts --allow-scripts-pending 查看哪些包的脚本将被阻止。
    2. 授权:使用 npm approve-scripts 允许你信任的包运行脚本。
    3. 拒绝:使用 npm deny-scripts 阻止其余包的脚本。
    4. 持久化:生成的白名单将写入 package.json,并建议提交至版本控制系统。
    5. 观察:在 npm 11.16.0+ 中,如果你的安装流程依赖脚本运行,你会看到相关的警告信息。

2. --allow-git 默认值设为 none

npm install 将不再解析 Git 依赖项(包括直接依赖和传递依赖),除非通过 --allow-git 标志显式允许。

  • 安全动机:此变更旨在关闭一个代码执行路径。此前,即使使用了 --ignore-scripts,Git 依赖项中的 .npmrc 文件仍可能覆盖 Git 可执行文件,从而导致潜在的安全风险。
  • 版本支持:该变更此前已于 2026 年 2 月 18 日宣布,并在 npm 11.10.0+ 中可用。

3. --allow-remote 默认值设为 none

npm install 将不再解析来自远程 URL 的依赖项(例如 https tarball 包,包括直接依赖和传递依赖),除非通过 --allow-remote 标志显式允许。

  • 版本支持:此标志已在 npm 11.15.0+ 中可用。
  • 例外情况:相关的 --allow-file--allow-directory 标志在 v12 中不会改变其默认值。

关键要点

  • 默认行为转变:npm v12 将“默认信任”转变为“默认拒绝”。所有脚本执行、Git 依赖解析和远程 URL 依赖解析均需显式授权。
  • 原生构建受影响node-gyp 隐式构建被视为脚本执行的一部分,将被默认阻止,需通过 allow-scripts 机制放行。
  • 配置持久化:脚本白名单将直接写入 package.json,确保团队内部配置一致。
  • 过渡期工具:开发者应升级至 npm 11.16.0+,利用警告信息和 npm approve-scripts 命令提前梳理依赖风险。
  • 时间线:npm v12 预计于 2026 年 7 月发布,目前相关功能已在 npm 11.x 系列中通过警告形式提供。

意义与影响

这一系列变更标志着 npm 在安全性策略上的重大转折,从“便利优先”转向“安全优先”。

  1. 遏制供应链攻击:通过默认禁用脚本执行和限制依赖来源,npm 大幅降低了恶意包通过 postinstall 脚本窃取密钥、植入后门或利用系统漏洞的风险。特别是针对 node-gyp 隐式构建的限制,堵住了许多开发者未曾意识到的攻击面。
  2. 提升透明度与控制权:开发者必须主动审查并批准每个依赖项的行为。这迫使团队更仔细地管理 package.json,明确知道哪些包在构建过程中会执行代码,从而提升项目依赖的透明度。
  3. 对 CI/CD 流程的影响:自动化构建环境需要相应调整。CI/CD 管道可能需要预先配置好 allow-scripts 白名单,或者在构建前运行 npm approve-scripts,否则构建可能会因脚本被阻止而失败。
  4. 社区适应期:由于涉及大量现有项目的默认行为改变,预计将在 2026 年 v12 正式发布时引发广泛的适配工作。开发者需利用 v11.16.0+ 的警告机制,提前数月甚至数年进行依赖审计和配置优化。

npm 团队建议开发者立即升级至 npm 11.16.0 或更高版本,通过社区讨论区反馈问题,并仔细阅读 npm approve-scriptsnpm deny-scriptsallow-scripts 配置文档,为即将到来的 v12 版本做好准备。

查看原文 →github.blog