今日要闻
打破信息壁垒,走近全球前端。Hello World 大家好,我是林语冰。
pnpm 发布了 v11 主版本,涵盖了新功能和破坏性更新,主要包括:
- pnpm 现在以纯 ESM 模块分发,且要求
node@>=22 - 全局模块安装隔离,模块的
JSON存储索引换用 SQLite 数据库 pnpm view等命令原生实现,不再委托给 npm CLI- 供应链保护默认启用,新增配置或修改默认值
新功能
pnpm CLI 新命令
pnpm@11 新增了一些终端命令:
pnpm pack-app:通过 Node SEA(独立可执行应用)把 CJS 项目打包成多平台的独立可执行文件pnpm peers check:检查锁定文件中的对等依赖- 所有新命令另请参阅 pnpm 官方文档......
此外,pnpm@11 还提供了一些简写的新别名:
| 完整命令 | 简写别名 |
|---|---|
pnpm |
pn |
pnpx / pnpm dlx |
pnx |
--filter |
-F |
供应链保护
由于 axios 等重大供应链攻击事件频发,pnpm 从 v10 开始就提供了一些缓解供应链攻击的防御机制,pnpm@11 继续新增功能或修改了默认配置。
为了缓解供应链攻击,我们希望模块新版本刚发布时不要立即同步更新,而是暂缓观察,确保安全后再更新。
为此,pnpm@10.16 在 pnpm-workspace.yaml 中新增了 minimumReleaseAge,支持配置模块更新的最小发布延时,但该配置的默认值是 0,也就意味着默认不开启。
在此基础上,pnpm@11 将 minimumReleaseAge 默认值修改为 1440 分钟,确保模块的新版本延时 至少一天 再升级。
yaml
# pnpm 10.16 之后的默认值:
minimumReleaseAge: 0
# pnpm 11 之后的默认值:
minimumReleaseAge: 1440
如果你升级到 pnm@11 之后,仍想回退到 pnpm@10 的默认行为,可以重置为 minimumReleaseAge: 0。
此外,大多数供应链攻击会在 npm install <pkg> 之后,通过 postinstall 脚本自动运行恶意代码,因此 pnpm@10 开始就禁用了 postinstall 脚本。
同时,pnpm@11 使用 allowBuilds 取代了 ignoreDepScripts 等旧版配置,建议用它来显式列出可信任的依赖,允许它们运行脚本。
yaml
# ❌ pnpm 10 的配置全部移除:
onlyBuiltDependencies:
- electron
onlyBuiltDependenciesFile: "allowed-builds.json"
neverBuiltDependencies:
- core-js
ignoredBuiltDependencies:
- esbuild
# ✅ pnpm 11 之后:
allowBuilds:
electron: true
core-js: false
esbuild: false
PS:更多缓解供应链攻击的措施,另请参阅 pnpm 官方指南。
底层实现变动
pnpm@11 之前,模块索引使用 JSON 文件来存储,现在换用为单一 SQLite 数据库。
另外,使用 pnpm add -g <pkg> 和 pnx 命令安装的全局模块会使用全局虚拟存储隔离,package.json,node_modules/ 和锁定文件存储在自己单独的文件夹下,防止全局模块之间互相干扰。
还有,pnpm view 等命令原本委托 npm CLI 来实现,现在 pnpm 自己原生实现,不再委托 npm。
结果,pnpm publish 等命令都是原生实现,pnpm set-script 等命令直接删除,运行没有实现的冷门命令时,pnpm 也会报警告诉你。
底层依赖方面,采用 undici 取代了 node-fetch,用于所有 HTTP 请求,爽用更好的 keep-alive 和优化的全局调度器。
升级须知
pnpm@11 现在以纯 ESM 模块格式分发,且要求 node>=22。
pnpm 升级大致有两种场景,全局升级或本地项目升级。
pnpm 现在只会从 .npmrc 读取注册源和认证授权配置,其他配置不再从 .npmrc 中读取。所以,将 pnpm 的本地设置从 .npmrc 迁移到 pnpm-workspace.yaml,将全局配置迁移到 ~/.config/pnpm/config.yaml。
pnpm 提供了自动迁移工具,能迁移大部分配置,但少数配置还是需要手动调整。
从 pnpm@10 升级到 pnpm@11 属于主版本升级,不仅涵盖新功能还涉及不向后兼容的破坏性更新,另请参阅 pnpm 完整的迁移指南。
重点总结
总之,pnpm@11 主版本更新主要包括:
- pnpm 新增了命令和简写别名,升级要求
node@>=22 - 全局模块安装存储索引换用 SQLite 数据库,避免互相干扰
pnpm view等命令原生实现,.npmrc只读取注册源和认证相关配置- 供应链保护默认禁用恶意脚本和启用延迟依赖更新,
allowBuilds替换旧配置等
以上就是今日《前端快讯》的全部内容了,希望对你有所帮助。
👍 感谢大家按赞跟转发分享本文,你的手动支持是我坚持创作的不竭动力喔。
😘 已经关注我的粉丝们,我们下期再见啦,掰掰~~

参考文献:
- pnpm 更新日志:pnpm.io/blog/releas...
- pnpm 供应链保护:pnpm.io/supply-chai...
- pnpm 升级指南:pnpm.io/migration