跳到主要内容

pnpm yarn npm 包管理工具区别

npm 问题(嵌套结构树)

  • 包占用空间大
  • 嵌套引用时,包会重复安装

npm 改进(flat 结构)

  • npm@2 之后,包的安装方式变成了 flat 的,也就是说,所有的包都会安装在 node_modules 的根目录下,这样会导致包的重复安装

yarn(flat 结构)

为避免包的重复安装

  • yarn 使用 flat 的方式来安装包,但是它会在安装包的时候,会把包的依赖也安装到根目录下,这样就避免了包的重复安装

npm@2 之后 和 yarn 都是使用 flat 的方式来安装包,但是当项目没有依赖某个包, 但是某个依赖包依赖了这个包,这样就将该包安装到了根目录下, 项目如果使用这个包,当依赖包不再依赖这个包时,这个包就会被删除, 包会被删除,从而导致项目无法运行

flat 方式带来的问题:

  • 幽魂依赖:项目中的包被删除,但是项目还在使用这个包,这样就会导致项目无法运行

pnpm

pnpm 链接方式:

  • 使用软链接的方式表示包之间的依赖关系
  • 使用硬链接的方式,链接到全局的 store 中,减少包的重复

    硬链接:在同一个文件系统中,多个文件名指向同一个文件内容,这种文件名的关系称为硬链接。硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要文件,以防止“误删”的功能。硬链接的一个缺点是,不能跨文件系统,即硬链接只有在同一个文件系统中才能创建成功。 删除硬链接文件不影响原文件,只有当原文件的所有硬链接文件都被删除后,原文件才会被删除。 硬链接图解:

图片来源:In-depth of tnpm rapid mode - how we managed to be 10 second faster than pnpm

对比 npm 和 yarn 的优势

  • 不依赖 Node.jsRuntime,直接安装 brew install pnpm
  • 通过 pnpm 命令,可以管理 Node.js 版本,代替 nvm

所以可以用 pnpm 来代替 yarnnpmnvm

参考