Github官博:npmv12即将引入的重大变更。估计是给近期的供应链攻击搞

蚁工厂 2026-06-10 10:24:10

Github官博:npm v12 即将引入的重大变更。估计是给近期的供应链攻击搞麻了。----------我们的下一个 npm 主版本 v12 将对 `npm install` 引入与安全相关的默认行为变更。所有这些变更目前已在 npm 11.16.0 或更高版本中以警告形式提供,因此你可以在升级前提前准备。v12 预计将于 2026 年 7 月发布。

每项变更都会把目前 `npm install` 中自动执行的行为,改为需要你显式选择启用:

`allowScripts` 默认关闭

`npm install` 将不再执行依赖项中的 `preinstall`、`install` 或 `postinstall` 脚本,除非这些脚本已在你的项目中被明确允许。这也包括原生 `node-gyp` 构建。

也就是说,如果某个包包含 `binding.gyp` 且没有显式的安装脚本,它仍然会被阻止,因为 npm 会为其运行隐式的 `node-gyp rebuild`。来自 git、file 和 link 依赖的 `prepare` 脚本也会以同样方式被阻止。

要查看哪些脚本会被阻止,请运行:

```bashnpm approve-scripts --allow-scripts-pending```

然后使用以下命令允许你信任的包:

```bashnpm approve-scripts```

并使用以下命令阻止其余包:

```bashnpm deny-scripts```

生成的允许列表会写入 `package.json`,并应提交到版本控制中。如果你的安装流程会运行脚本,你可以在 npm 11.16.0+ 中观察相关警告。

`--allow-git` 默认值变为 `none`

`npm install` 将不再解析 Git 依赖,无论是直接依赖还是传递依赖,除非通过 `--allow-git` 显式允许。

此变更关闭了一条代码执行路径:Git 依赖中的 `.npmrc` 可能会覆盖 Git 可执行文件,即使使用了 `--ignore-scripts`。该变更此前已于 2026 年 2 月 18 日宣布,并已在 npm 11.10.0+ 中提供。

`--allow-remote` 默认值变为 `none`

`npm install` 将不再解析来自远程 URL 的依赖,例如 HTTPS tarball,无论是直接依赖还是传递依赖,除非通过 `--allow-remote` 显式允许。

该标志已在 npm 11.15.0+ 中提供。相关的 `--allow-file` 和 `--allow-directory` 标志在 v12 中不会改变其默认值。

如何准备

升级到 npm 11.16.0 或更高版本,运行你通常的安装流程,并查看警告信息。使用以下命令查看哪些包包含脚本:

```bashnpm approve-scripts --allow-scripts-pending```

批准你信任的包,并提交更新后的 `package.json`。完成后,升级后只有你已批准的脚本会继续运行。任何未批准的脚本都会停止执行。

0 阅读:0
蚁工厂

蚁工厂

感谢大家的关注