行则将至

人生在勤,不索何获

0%

Yarn 简介

Yarn 是 Facebook 发布的新一代包管理工具,旨在解决以往使用 npm 作为包管理会遇到的一些问题。特点:可靠安全

Yarn 的优点?

  • 速度快 。速度快主要来自以下两个方面:  1. 并行安装:无论 npm 还是 Yarn 在执行包的安装时,都会执行一系列任务。npm 是按照队列执行每个 package,也就是说必须要等到当前 package 安装完成之后,才能继续后面的安装。而 Yarn 是同步执行所有任务,提高了性能。  2. 离线模式:如果之前已经安装过一个软件包,用 Yarn 再次安装时之间从缓存中获取,就不用像 npm 那样再从网络下载了。
  • 安装版本统一:为了防止拉取到不同的版本,Yarn 有一个锁定文件 (lock file) 记录了被确切安装上的模块的版本号。每次只要新增了一个模块,Yarn 就会创建(或更新)yarn.lock 这个文件。这么做就保证了,每一次拉取同一个项目依赖时,使用的都是一样的模块版本。npm 其实也有办法实现处处使用相同版本的 packages,但需要开发者执行 npm shrinkwrap 命令。这个命令将会生成一个锁定文件,在执行 npm install 的时候,该锁定文件会先被读取,和 Yarn 读取 yarn.lock 文件一个道理。npm 和 Yarn 两者的不同之处在于,Yarn 默认会生成这样的锁定文件,而 npm 要通过 shrinkwrap 命令生成 npm-shrinkwrap.json 文件,只有当这个文件存在的时候,packages 版本信息才会被记录和更新。
  • 更简洁的输出:npm 的输出信息比较冗长。在执行 npm install 的时候,命令行里会不断地打印出所有被安装上的依赖。相比之下,Yarn 简洁太多:默认情况下,结合了 emoji 直观且直接地打印出必要的信息,也提供了一些命令供开发者查询额外的安装信息。
  • 多注册来源处理: 所有的依赖包,不管他被不同的库间接关联引用多少次,安装这个包时,只会从一个注册来源去装,要么是 npm 要么是 bower, 防止出现混乱不一致。
  • 更好的语义化: yarn 改变了一些 npm 命令的名称,比如 yarn add/remove,感觉上比 npm 原本的 install/uninstall 要更清晰。

常用命令

执行 yarn / yarn install 解析 package.json 时,分为 4 个步骤:

  1. 依赖关系解析:yarn 在解析 package.json 文件时,会对其每个依赖包进行遍历分析生成 yarn.lock 文件。该文件描述了项目中每个包以及每个包中所依赖的包的版本信息。
  2. 包下载:根据第一步中解析的结果下载特定版本的包。如果该包曾经被下载过,则跳过此次的下载操作,直接使用本地缓存,即 yarn 的离线模式特性。
  3. 包关联:关联拷贝下载或者缓存在全局的包到项目。
  4. 包编译:编译项目中使用到的包。 

yarn.lock(该文件用于锁定包版本已保障每次编译的结果一致,也可通过 yarn install --no-lockfile 命令设置不生成 yarn.lock 文件)

yarn & npm 常用命令对比 Yarn 的命令基本跟 npm 的大同小异, 使用 yarn init 生成 package.json 文件, 用 yarn addyarn add --dev 分别替换 npm install --savenpm install --dev 命令即可。

NPM YARN 说明
npm init yarn init 初始化某个项目
npm install/link yarn install/link 默认的安装依赖操作
npm install taco —save yarn add taco 安装某个依赖,并且默认保存到 package.
npm uninstall taco —save yarn remove taco 移除某个依赖项目
npm install taco —save-dev yarn add taco —dev 安装某个开发时依赖项目
npm update taco —save yarn upgrade taco 更新某个依赖项目
npm install taco --global yarn global add taco 安装某个全局依赖项目
npm publish/login/logout yarn publish/login/logout 发布 / 登录 / 登出,一系列 NPM Registry 操作
npm run/test yarn run/test 运行某个命令

设置国内源

yarn 原仓库包下载不稳定时需要设置国内源

1
yarn config set registry "https://registry.npm.taobao.org"

Backlinks: