Skip to content
霞露小伙 — HfWang
On this page

pnpm yarn npm 区别

npm1.x 和 npm2.x

会出现依赖里面又有依赖,如下:

- node_modules
    - express
        - node_modules
            - 依赖包A
            - 依赖包B
        - libs
    - lodash
        - libs
        - node_modules
            - 依赖包A
            - 依赖包B

这样,当出现多个依赖使用到相同的依赖包的,会出现重复安装同一个依赖包的情况

yarn 和 npm3.x

将依赖平铺, 假设项目依赖了 A包 和 B包, 而 A、B 两个包都依赖了 lodash(相同版本), 那么 yarn 会把 lodash 平铺出来和 A、B 同级别

- node_modules
    - A
    - B
    - lodash

那如果 A、B 都依赖了 lodash,但是这两个包依赖的 lodash 版本不一致会怎么样

- node_modules
    - A
    - B
        - lodash@xx.xx.b
    - lodash@xx.xx.a

但是这种方式就会造成 幽灵依赖,即我项目里实际上没有安装 lodash,但是因为 yarn / npm3 把依赖给平铺了,所以我们在项目里是可以正常使用 lodash 提供的能力的。

假若我们使用了 lodash 提供的能力并应用在我们的项目中,那如果某一天 A、B 包都都移除了 lodash 作为他们的依赖,但是我们项目中有使用了 lodash,这个时候就会出现异常

而 pnpm 的出现就是为了解决上面说到的这两个问题的 - 重复安装相同的依赖包幽灵依赖

pnpm

pnpm 的实现思路是这样的,当你安装依赖的时候,它会帮你将依赖安装到电脑全局去,然后使用依赖包的时候通过软链 link 链接到依赖去

pnpm 官方配图

即 pnpm 只会在全局保存一份,当其他依赖包用到以保存的依赖包时,通过软连接找到之前保存的依赖包就行了

这样就可以极大的节约磁盘内存又避免了幽灵依赖的问题

pnpm 局限

npm-shrinkwrap.json 和 package-lock.json 被忽略

本站中引用到的其他资料,如有侵权,请联系本人删除