pnpm npm

46 阅读1分钟

幽灵依赖-- npm@3之后,yarn等,都是通过将依赖扁平化放在node_modules,如果A中依赖了B,而B没有在package.json中引用,此时B却可以在项目中使用(因为被扁平化放在了项目中),这时如果删除了A,B的引用可能出现问题。

分身问题-- npm 对于想同依赖的不同版本,只会将其中最早引用的版本提升到最顶层node_modules,而其他的版本可能会被重新安装,嵌套在父依赖下。

pnpm 后,在默认情况下不允许访问未声明的依赖

  • 硬连接 不同文件名 指向同一数据块 ,同一数据块的不同引用,删除原始文件,不会影响硬连接,只有所有的硬连接都被删除才会释放数据块

  • 软连接 软连接是新建一个文件,文件内容指向另一个文件的路径

  • pnpm 通过对package.json分析,创建一个store用于存储共享依赖。

  • 而node_modules 中的.pnpm 是通过硬连接获取store中的共享依赖,而不是复制

  • 所以自然没有了幽灵依赖的问题

  • 数据块只有一份,所以打包体积更小,包与包之间的依赖关系是通过软连接来组织的

juejin.cn/post/712729…