文章摘要
npm v12将于2026年7月发布,主要变更包括:默认禁用依赖包中的安装脚本执行,需手动批准可信脚本;默认禁止解析Git依赖,需显式授权。这些安全改进已在npm 11.16.0+版本提供警告提示,建议用户提前测试适配。
文章总结
标题:npm v12即将推出的重大变更
发布日期:2026年6月9日
GitHub官方博客宣布,npm的下一个主要版本v12将对npm install命令引入安全相关的默认变更。这些变更已在npm 11.16.0及以上版本中通过警告提示功能提前开放,预计正式版将于2026年7月发布。
主要变更内容包括:
脚本执行默认禁用
npm install将不再自动执行依赖包中的preinstall、install或postinstall脚本,包括原生的node-gyp构建脚本。用户需通过npm approve-scripts命令显式批准可信包的脚本执行,审批结果将写入package.json文件。当前版本用户可通过npm approve-scripts --allow-scripts-pending预览将被拦截的脚本。Git依赖默认禁用
安装时将不再解析Git依赖(包括直接和间接依赖),除非通过--allow-git参数显式允许。该变更旨在阻断通过Git依赖的.npmrc文件覆盖Git执行路径的安全风险,已在npm 11.10.0+版本中预先通告。远程依赖默认禁用
新增--allow-remote参数控制远程URL依赖(如https压缩包)的解析,该功能已在npm 11.15.0+版本提供。但--allow-file和--allow-directory参数的默认行为在v12中保持不变。
升级建议:
建议用户立即升级至npm 11.16.0+版本,通过常规安装流程查看警告提示,使用审批命令管理脚本执行权限,并将审批结果提交至版本控制系统。详细操作指南可查阅官方文档中的npm approve-scripts、npm deny-scripts命令说明及allow-scripts配置项。
(注:原文中的社区讨论链接及部分技术细节说明因篇幅限制未完全呈现,核心信息已完整保留)
评论总结
以下是评论内容的总结,平衡呈现不同观点并保留关键引用:
对GitHub/NPM所有权关系的关注
- 有用户对NPM被GitHub收购表示意外
- 引用:"didn't know npm was owned by github.. well, that explains things..."(评论1)
对界面设计的批评
- 用户质疑GitHub的状态标识设计
- 引用:"I hope GitHub changes their vibecoded badges, what does RETIRED even signify...Why does the preview have to be in ominous red?"(评论2)
安全改进的有效性质疑
- 部分用户认为安全更新只是转移而非解决问题
- 引用:"Looks good? But doesn't this just change the compromise window from first installation to first run?"(评论3)
- 引用:"Couldn't this effectively result in the same process we get in pre-12 defaults?"(评论7)
安全建议
- 建议添加默认的年龄限制
- 引用:"They should have added a 1-day age limit by default, so security scanners have some time."(评论4)
对更新迟缓的批评
- 用户指出漏洞修复延迟问题
- 引用:"this release fixes a vulnerability reported 10 years ago"(评论5)
- 引用:"Eh, that only took a few dozen actively exploited supply-chain vulns in the span of two years!"(评论6)
对新功能的积极评价
- 认可白名单功能的改进
- 引用:"it seems like the allow list...supports whitelisting packages instead of a global setting"(评论8)
- 引用:"Nice that they're following pnpm's lead on this"(评论11)
开发者实际使用问题
- 开发者关心二进制分发的影响
- 引用:"does allowScripts also default to disabled when directly installing a package?"(评论9)
对更新的总体态度
- 部分用户对更新表示欢迎
- 引用:"The 'aw geez, enough is enough' release. Finally."(评论10)
注:所有评论均无评分信息。总结涵盖了从界面设计、安全改进、功能更新到开发者体验等多个方面的观点,保持了不同意见的平衡呈现。