pnpm
另外一个不错的包管理工具。
pnpm 是 Node.js 生态中基于内容寻址的包管理器,通过硬链接与符号链接将依赖统一存储在全局 store 中,从根源上消除重复下载与磁盘浪费,同时内置最小发布年龄(minimumReleaseAge)等供应链安全机制。
| 收费 | 开源免费(MIT) |
|---|---|
| 平台 | 跨平台(macOS/Linux/Windows) |
| 中文 | 官网支持简体中文(99%翻译进度) |
| 用途 | Node.js 依赖管理与 Monorepo 工作空间 |
pnpm 不采用 npm/yarn 的平铺 node_modules 方式,而是将每个包的精确版本以硬链接形式存入全局 store(默认位于 ~/.pnpm-store/v3/files/),项目 node_modules 下仅保留 package.json 声明的依赖,并通过符号链接指向 store 中的实际文件。
pnpm 默认移除 postinstall 脚本(常见攻击路径),并引入 minimumReleaseAge 配置,让新版本发布后至少等待指定时间(如 24 小时)才被安装,给社区留出发现恶意包的时间窗口。
pnpm 内置工作空间(workspace)功能,通过 pnpm-workspace.yaml 配置文件即可将多个子项目聚合到同一仓库,无需额外工具。
安装方式多样,命令风格与 npm 高度一致,迁移成本极低。
Q1:pnpm 与 npm/yarn 在 node_modules 结构上有什么本质区别?
A1:npm/yarn(3.x+)采用平铺结构,将所有依赖及其子依赖平铺到 node_modules 根目录,导致幽灵依赖和重复安装;pnpm 则使用符号链接形成嵌套结构,node_modules 下只显示 package.json 声明的直接依赖,实际文件通过硬链接指向全局 store。
Q2:pnpm 的 minimumReleaseAge 如何配置?
A2:在 .npmrc 文件中设置 minimumReleaseAge=1d(或 24h),表示新版本发布后至少经过 1 天才能被安装,用于防范恶意包在发布后立即被拉取。该功能在 pnpm 11.x 中已稳定可用。
Q3:pnpm 能兼容现有的 npm 项目吗?
A3:可以。pnpm 支持读取 package.json 和 lock 文件(npm lockfile v1/v2,yarn lockfile v1),直接运行 pnpm install 即可替换。对于需要覆盖子依赖的场景(如 npm 无法处理的 overrides),pnpm 可直接解析相同的 package.json 配置。
更多同类工具与网站,可在构建工具分类继续挑选。
信息核实于 2026年7月,具体以官网为准。
评论
暂无评论