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.js的Runtime,直接安装brew install pnpm - 通过
pnpm命令,可以管理Node.js版本,代替nvm
所以可以用 pnpm 来代替 yarn 、 npm 和 nvm