pnpm的使用

1. pnpm是什么

  pnpm是一种常见的包管理工具,详情可见 官方文档

2. 为什么使用pnpm

  2.1 介绍

    前端常见的包管理工具有yarn、npm、pnpm

    npm1 npm2是采用嵌套结构的,优点是结构清晰可见,问题是依赖不可重用,有大量重复依赖,还有依赖路径可能过长

    npm3/yarn1是采用依赖扁平化,根据node加载模块的路径查找算法,递归向上查找node_modules中的package, 优点是减少重复依赖,依赖层级不会太深,但会有以下问题:

      1. 幽灵依赖(phatom): 因为扁平化处理,把所有依赖都提升到node_modules的一级目录,导致在工作区未声明的包,可以直接被项目引用

      2. 扁平化算法本身比较复杂耗时

      3. 依赖结构的不确定性(doppelgangers),如果a、c依赖的b版本不同,那么哪个b版本先提升都是有可能的(对于同一个依赖的不同版本,将其中一个版本安装到根目录,其他版本安装在各自package下的node_modules,解决依赖不同版本的冲突问题),取决于a和c在package.json中的位置,谁在前那么对应的依赖会被提升

   2.2 pnpm可以解决以上问题,它使用软连接和硬链接来构建node_modules目录

    硬链接:实际上是一个指针指向源文件的inode(存储文件的信息),新建硬链接引用计数加1,删除时只要有引用文件就存在,当你修改源文件或者连接文件任何一个的时候,其他文件都会做同步的修改

    硬链接文件的限制: 不允许给目录创建硬链接;只允许在同一文件系统中的文件之间才能创建链接

    软链接:相当于快捷方式,删除软链接对源文件无影响,删除源文件软链接会找不到要指向的文件

  2.3 pnpm的使用

    比如安装vue,那么node_modules下面会只有vue和.pnpm文件夹,vue所需的依赖都在.pnpm下面,依赖中之间的互相引用是软连接的形式,依赖和全局存储文件的地方 .pnpm-store/v3 之间是硬链接的形式

3. 对包管理器的对比总结:

 当使用npm或者yarn时,如果有100个项目使用了某依赖,那么会有100份依赖保存在磁盘上,而pnpm只创建一份,所有需要用到的采用硬链接过去,允许跨项目共享依赖;

  pnpm使用软链接解决了幽灵依赖和以上2.1介绍中的第3个问题依赖结构的不确定性

 

参考

浅谈pnpm & (软链接 与 硬链接)

为什么推荐使用pnpm

npm中的phatom和doppelgangers问题

pnpm切换指南

都2022年了,pnpm快到碗里来!

 

posted on 2023-01-07 23:23  yemiaomiao  阅读(1447)  评论(0编辑  收藏  举报

导航