pnpm 的存储体系由两层构成:底层是内容寻址存储(CAS),保存所有已下载文件的物理副本;上层是虚拟存储(Virtual Store),为每个项目维护一套符合 Node.js 模块解析算法的目录结构。默认情况下,每个项目在 node_modules/.pnpm 中拥有独立的虚拟存储投影,虚拟存储内的文件通过硬链接指向 CAS。pnpm v11 起,全局虚拟存储(Global Virtual Store)对 pnpm dlx 和全局安装的包默认启用;普通项目如需启用,可在配置文件中设置 enableGlobalVirtualStore: true。全局虚拟存储可将多个项目的虚拟存储合并为单一共享位置,进一步减少重复的目录结构开销。
store 目录采用版本化命名(如 v10、v11),由 STORE_VERSION 常量控制。这种设计确保存储格式变更时能够平滑迁移,不同版本的 pnpm 可以识别并兼容对应格式的 store。用户可通过 pnpm store path 命令查询当前激活的 store 路径,通过 pnpm store status 检查 store 完整性,通过 pnpm store prune 清理未被引用的孤立包。
pnpm v11 起,全局安装的包(pnpm add -g)采用隔离安装模式。每个全局安装组拥有独立的目录,包含自己的 package.json、pnpm-lock.yaml 和 node_modules,组与组之间互不干扰。二进制文件的 shim 统一放置在 {pnpmHomeDir}/bin/ 中,指向对应安装组的 node_modules。