pnpm
专题版块详见 pnpm 专题。
特性/工具 | npm | Yarn | pnpm |
---|---|---|---|
安装方式 | 默认与 Node.js 一起安装 | 需要单独安装,通常使用 npm install -g yarn | 需要单独安装,通常使用 npm install -g pnpm |
缓存机制 | 默认缓存,二次安装会加快速度 | 有缓存机制,安装依赖时可以更快 | 有强大的缓存机制,能够显著加速重复安装 |
安装速度 | 较慢(npm 之前的版本) | 快于 npm ,并行安装 | 更快,采用硬链接和共享存储方式来加速安装 |
依赖管理 | package-lock.json 锁定依赖 | yarn.lock 锁定依赖 | pnpm-lock.yaml 锁定依赖 |
安装机制 | 逐个安装依赖,node_modules 可能重复 | 并行安装依赖,node_modules 结构更简洁 | 使用硬链接和符号链接,在项目目录中共享依赖 |
安装重复依赖 | 可能会重复安装相同版本的依赖 | 相同的依赖不会重复安装 | 不会重复安装相同版本的依赖,依赖共享机制 |
模块解析 | 基于 node_modules 树状结构 | 基于 node_modules 树状结构 | 使用虚拟存储(软链接),不同项目间共享依赖 |
工作目录 | node_modules 文件夹 | node_modules 文件夹 | node_modules 文件夹(实际依赖通过符号链接) |
工作方式 | 基于包的扁平结构和 node_modules 文件夹 | 使用并行安装,依赖管理更高效 | 高效使用硬链接和软链接减少重复内容 |
兼容性 | 与 npm 脚本完全兼容 | 与 npm 兼容,部分命令行为略有不同 | 与 npm 和 Yarn 大部分命令兼容,依赖管理有不同 |
工作空间 | npm 7+ 支持工作区(workspaces) | 支持工作区(workspaces) | 支持工作区(workspaces) |
使用环境 | 多用于传统的 npm 用户 | 多用于需要高性能和稳定性的项目 | 多用于希望减少冗余依赖的团队,适用于大型项目 |