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个问题依赖结构的不确定性
参考
标签:node,文件,依赖,pnpm,modules,使用,链接 From: https://www.cnblogs.com/dylAlex/p/17023497.html