Skip to content

pnpmnpm 都是 JavaScript 编程语言中用于包管理的工具。尽管它们的目的相同,即管理项目中的依赖项,但它们在实现和功能上存在一些区别:

  1. 存储方式
    • pnpm 使用硬链接和符号链接的方式来存储依赖项,这意味着相同版本的包在磁盘上只会存储一份,但在每个项目中都可以访问。这种方法节省了磁盘空间,并且提高了安装速度。
    • npm 为每个项目分别存储一份依赖项的拷贝,这可能会导致相同的包在不同项目中重复存储,占用更多的磁盘空间。
  2. 性能
    • pnpm 通常提供比 npm 更快的安装速度,这部分得益于其独特的存储机制和并行处理能力。
    • npm 的性能在近年来也有所提升,尤其是在 npm 5 及之后的版本中,但 pnpm 仍然在某些情况下拥有性能优势。
  3. 安全性
    • pnpm 强制执行一个严格的模块解析策略,这意味着代码只能访问其直接依赖的包,而不能访问未列为依赖的包。这有助于防止意外或恶意的代码执行。
    • npm 允许代码访问所有安装在 node_modules 目录下的包,不管它们是否被列为项目的依赖。
  4. 命令接口
    • pnpm 的命令与 npm 类似,所以对于 npm 用户来说,迁移到 pnpm 通常很直观。
    • npm 是 Node.js 默认的包管理器,它的命令行接口为大多数 JavaScript 开发者所熟知。
  5. 社区和生态系统
    • npm 拥有最大的用户基础和社区支持,因为它是 Node.js 的官方包管理器。
    • pnpm 虽然用户基础较小,但社区活跃,且在不断增长。
  6. 兼容性
    • pnpm 在某些情况下可能与依赖特定 npm 行为的工具或脚本不兼容。
    • npm 作为标准工具,兼容性通常较好。

选择 pnpm 还是 npm 取决于你的项目需求、对性能的关注程度以及你愿意在兼容性和社区支持方面做出的妥协。许多开发者因为 pnpm 在性能和空间利用上的优势而选择它,尤其是在管理大型项目或多项目工作时。

相关命令

npm install -g pnpm@xxxx

# 设置新的镜像地址 pnpm set registry https://registry.npmmirror.com

pnpm set registry http://r.npm.sankuai.com/

pnpm config get registry

pnpm优先级高于yarn高于npm!