包管理
Q 什么是包管理 A 对相关依赖包的依赖关系以及文件存储进行管理
早期弊端
早期下载依赖的时候,不同的下载顺序,有可能造成不同包的提升,从而导致异常,为了保障每次下载依赖,都相同,那么就采取Lock机制
- 若无lock ,每次安装依赖,各个包版本可能发生改变,进而造成问题,确保每一次安装,依赖关系都是明确的,版本是唯一的。
workspaces
- 这个在包管理中,代表多包管理,多个子包,共用一个包
packagejson
- devdependencies
- 仅开发阶段使用,如测试包等,特点不会打包到产物
- peerDependency
- 指定特定包的依赖,必须安装
- dependency
- 被打包到生产环境中,项目运行时依赖。
pnpm
硬,软链接
npm 早期存在嵌套的,那嵌套导致的一个结果是包重复下载,占用空间,极端情况下多重嵌套,会突破系统限制的路径长度 之后 yarn 对于嵌套问题,主要处理为平铺模式,相同依赖进行提升,避免重复安装
因为平铺导致的幽灵依赖,隐士依赖,会导致隐形问题
因此产生了 pnpm 软硬链接,依然不懂
首先硬链接,通俗理解就是同一文件的多个引用,都指向同一个,删除任意一个不影响其它的引用 软链接就是,存储路径的文件.
对于Pnpm 来说先通过硬链接,将全局store中的npm包,链接到.pnpmstore中,之后nodemodules里面的各个包之间使用软链接,只保持访问路径
从官方图看其实就是内部软链接,间接通过硬链接找到全局store中的文件