npm 存在的问题
- 安装依赖花费的时间成本
- npm客户端在安装依赖包时会自动执行其中的脚本,有安全性问题
- 为了确保项目开发人员所安装的依赖包版本相同,需要使用shrinkwrap.json 文件,
- 但这个工具不是默认生成的,需要程序员手动生成,并提交。
- 在npm中,更新一项单独的依赖会按照语义化版本的规则更新一堆无关的依赖。
yarn 介绍:
是一款新的包管理器,将取代原有的基于npm客户端的工作流,但同时又保留了npm仓库的兼容性。
它具备原油工作流的所有功能,但相比之下更加快速,安全,可靠。
- 快速:并行安装,缓存每个已经下载了的程序包,所以再次安装的时候不需要再次下载。
- 可靠:使用详尽的简洁的并使用lockfile和决定性算法来安装yarn可以保证只要安装运行在一个系统上,也将以完全相同的方式运行在其他系统上,yarn能够参与一个项目的所有用户维持相同的节点模块(node_modules)目录结构,有助于减少难以追踪的bug和在多台机器上肤质。
3. 安全:yarn 在每一个安装包代码执行前,使用校验和的方式去验证包的完整性。
yarn的架构设计:
在node的生态系统中,依赖会被安装到项目中的node_modules目录中,不过其内部的文件结构和实际的
依赖关系数并不完全对应,因为安装过程存在重复依赖的合并机制。npm客户端在把依赖安装到
node_modules 目录时存在不确定性。这种不确定性是指,由于安装依赖的顺序不同,得到的
node_modules目录的内部结构可能和别人不一样,这样就会产生 ”在我电脑上是好的“的bug问题。
yarn 解决上述问题和不确定性的方案是引入 lockfile 文件,并启用了一套新的安装算法,以此达到一致、
可靠的结果。这个lockfile会吧所有的安装的依赖锁定在一个固定的版本上,确保每次安装所产生的
node_modules 目录的文件结构在不同机器上总是一致的。这个lockfile 采用一种简明的格式来书写,
其字段是有序的,以确保每次更新都是最小化的,易于 review 的。
yarn 的安装过程:
- 解析:yarn 首先开始解析依赖关系,它向仓库中发出请求,并递归查询各层依赖。
- 获取:接下来,yarn 会在全局的缓存目录中查找当前所需包是不是已经下载过了。如果还没有,yarn会把这个包下载下来,并把它存放在全局缓存中,这样它下次就可以离线安装了,无需重复下载。依赖包也可以以tar包的形式存放到版本控制系统中,以实现完全的离线安装
- 链接:最后,yarn包会把所有的文件从缓存中复制到本地 node_modules 目录中,这样所有的东西就链接为一个整体。
由于把安装过程清晰的拆解开来,消灭了安装结果的不确定性,所以yarn 天生具备并行操作的能力。
yarn 安装:
- 利用 nam 安装
npm install yarn -g
- mac 电脑用 homebrew
brew install yarn
yarn 的使用方式:
- 创建一个项目:
yarn init — 会在项目目录生成一个package.json 文件
- 添加、更新、删除一个依赖包文件
- 添加: yarn add [package]@[version]
- 更新: yarn update [package]@[version]
- 删除: yarn remove [package]
- 根据package.json 安装所有依赖
yarn 或者 yarn install
- 其他命令和npm 基本相同