Yarn
yarn 是包管理器。解决 npm 安装速度慢,稳定性差的问题。在 npm 还处于 V3 的时候,npm 还没有 package-lock.json 文件,当时的 npm 安装速度慢,稳定性差,所以在 2016 年, Yarn 就出现了。
Yarn 的优点
- 稳定:通过 yarn.lock 机制,保证了稳定性,不管安装顺序如何,在相同的依赖关系,不同的环境下,都可以用相同的安装方式进行安装。
- 采用扁平化的安装模式:将依赖包的不同版本,根据一定的策略,归结为单个版本,避免创建多个副本产生冗余。
- 网络性能更好:采用排队请求的方法,类似并发请求池,能更好的利用网络资源。并且还有很好的失败重试机制
- 缓存机制:实现离线缓存
- yarn.lock 中子依赖的版本号,并不是确定的版本号,在这种情况下,单 yarn.lock 是确定不了 node_modules 目录结构,还需要和 package.json 进行配合才能确定 node_modules 的目录结构
Yarn 安装机制和背后思想
- 检测包:检查是否存在 npm 相关的一些文件,比如 package-lock.json 文件等,如果有会提醒用户,可能会产生冲突。当然还会有 cup 和 os 的检查
- 解析包:获取所有包的版本信息和详细信息
- 获取包:Yarn 根据包相关的信息生成一个 path 路径,然后判断系统中是否存在这个路径,如果存在,说明系统中存在缓存,不需要重新下载,如果不存在就需要重新下载
- 链接包:将依赖资源包放入到项目的 node_modules 中。这里在复制依赖之前,首先会解析 peerDependencies,如果找不到符合 peerDependencies 的依赖包会警告提示,然后将依赖资源复制到项目的 node_modules 中
- 构建包:如果依赖资源包存在二进制包需要编译,会在这一步进行处理
Yarn 的扁平化机制
所有的依赖不再一层层嵌套了,而是全部在同一层,这样也就没有依赖重复多次的问题了,也就没有路径过长的问题了
- 模块的安装顺序可能影响 node_modules 内文件结构