pnpm 11 发布,弃用 JSON 和 npm CLI,进化为纯 ES6 模块,新增 pnpm pack-app 等命令,供应链保护默认启用,要求 Node

今日要闻

打破信息壁垒,走近全球前端。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.16pnpm-workspace.yaml 中新增了 minimumReleaseAge,支持配置模块更新的最小发布延时,但该配置的默认值是 0,也就意味着默认不开启。

在此基础上,pnpm@11minimumReleaseAge 默认值修改为 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.jsonnode_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 替换旧配置等

以上就是今日《前端快讯》的全部内容了,希望对你有所帮助。

👍 感谢大家按赞跟转发分享本文,你的手动支持是我坚持创作的不竭动力喔。

😘 已经关注我的粉丝们,我们下期再见啦,掰掰~~

参考文献:

相关推荐
kyriewen2 分钟前
2026 年了,这 6 个 npm 包可以卸载了——浏览器原生 API 已经能替代
前端·javascript·npm
铁皮饭盒1 小时前
bun直接tsx,优雅!
javascript·后端
Csvn3 小时前
Monorepo 迁移血泪史:从 Multi-Repo 到 Turborepo,这 3 个坑我帮你踩完了
前端
星栈3 小时前
Dioxus 多页面怎么做:`dioxus-router`、嵌套路由、`Outlet` 和页面组织,一篇给你讲顺
前端·rust·前端框架
用户987409238873 小时前
用 Remotion + edge-tts 打造中文教学视频全自动流水线
前端
风骏时光牛马3 小时前
Less前端工程化实战:变量混合器与项目样式分层落地
前端
假如让我当三天老蒯3 小时前
Options API(选项式 API) 和 Composition API(组合式 API)
前端·vue.js·面试
SameX3 小时前
iOS 独立开发实践:用 MapKit + 像素渲染实现 Citywalk 轨迹地图 App「雁过留痕」
前端
_柳青杨3 小时前
一文吃透 Node.js 事件循环:从原理到 Node 20+ 重大变更
javascript·后端
skyey3 小时前
页面加载时,深色模式闪白的问题解决
前端