Yarn Learning

感谢前端造轮子的能力,npm 已经是世界上最大的软件注册表,不过其也有遭人诟病的缺陷,针对这些缺陷,yarn 便出现了。

yarn 是 Facebook、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具,其具有如下优势:

  • 极致的快速:Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快。
  • 离线模式:之前下载过的包,可以离线再次安装
  • 安全:下载前会检查签名及包的完整性
  • 超级可靠,保证各平台依赖的一致性yarn.lock存储这你的每个包的确切依赖版本,能确保从本地开发到生产环境的所有机器上都有精确相同的依赖版本。
  • 网络优化:力求网络资源最大利用化,让资源下载完美队列执行,避免大量的无用请求,下载失败会自动重新请求,避免整个安装过程失败
  • 扁平化模式:对于不匹配的依赖版本的包创立一个独立的包,避免创建重复的。

Yarn 没想要完全替代 npm,只是一个新的 CLI 工具,拉取的 packages 依然来自 npm 仓库。

install

npm install -g yarn

检测是否安装成功,如成功输出版本号即为成功:

yarn --version
# 1.3.2

usage

初始化项目

yarn init

yarn 会询问你如下信息:

name (your-project):
version (1.0.0):
description:
entry point (index.js):
git repository:
author:
license (MIT):

会生成如下类似 package.json 文件。

{
  "name": "my-new-project",
  "version": "1.0.0",
  "description": "My New Project description.",
  "main": "index.js",
  "repository": {
    "url": "https://example.com/your-username/my-new-project",
    "type": "git"
  },
  "author": "Your Name <you@example.com>",
  "license": "MIT"
}

添加依赖包

yarn add [package]
yarn add [package]@[version]
yarn add [package]@[tag]

添加依赖包到不同的依赖环境

yarn add [package] --dev // devDependencies
yarn add [package] --peer // peerDependencies
yarn add [package] --optional // optionalDependencies

升级依赖包

yarn upgrade [package]
yarn upgrade [package]@[version]
yarn upgrade [package]@[tag]

移除依赖

yarn remove [package]

安装依赖

yarn
# 或者
yarn install

进阶选项

  • yarn install --check-files
    验证 node_modules 中已安装的文件没有被移除。

  • yarn install --flat
    安装所有依赖,但每个依赖只允许有一个版本存在。 第一次运行这个命令时,会提示你在每个依赖包的多个版本范围中选择一个版本。 这会被添加到你的 package.json 文件的 resolutions 字段。

  • yarn install --force
    这回重新拉取所有包,即使之前已经安装的。

  • yarn install --har
    从安装期间的所有网络请求输出一个 HTTP archive。

  • yarn install --ignore-scripts

  • yarn install --modules-folder <path>
    node_modules 目录指定另一位置,代替默认的 ./node_modules

  • yarn install --no-lockfile
    不读取或生成 yarn.lock 锁文件。

  • yarn install --production[=true|false]
    如果 NODE_ENV 环境变量设为 production,Yarn 将不安装任何列于 devDependencies 的包。 使用此标志指示 Yarn 忽略 NODE_ENV 并用它取代“生产”与否的状态。

    注意:--production 等同 --production=true--prod--production 的别名

  • yarn install --ignore-optional
    不安装 optional dependencies。

  • yarn install --frozen-lockfile
    不生成 yarn.lock 锁文件,并且,如果需要更新则会报错。

  • yarn install --silent
    执行 yarn install 而不显示安装日志

  • yarn install --ignore-engines
    忽略引擎检查。

  • yarn install --offline
    在离线模式下运行

  • yarn install --non-interactive
    禁用交互提示,例如there’s an invalid version of a dependency

从 npm 迁移

一般情况下执行 yarn 的安装命令即可。

yarn

升级 yarn 之后, Yarn都会在项目根目录下生成 yarn.lock 文件,其他人也可以继续使用 npm。如果自己想换回 npm,删除 yarn.lock 文件即可。

如果项目目前使用了 npm-shrinkwrap.json 文件,请小心你可能会得到一组不同的依赖。 Yarn 不支持 npm shrinkwrap 文件,因为文件里没有足够的信息来支撑 Yarn 的确定性算法。 所以如果项目正在使用 shrinkwrap 文件,那么团队成员同时迁移到 Yarn 可能会更容易一点。 只需删除现有的 npm-shrinkwrap.json 文件,并提交新创建的 yarn.lock 文件。

npm (v5) Yarn
npm install yarn install
(不适用) yarn install --flat
(不适用) yarn install --har
npm install --no-package-lock yarn install --no-lockfile
(不适用) yarn install --pure-lockfile
npm install [package] yarn add [package]
npm install [package] --save-dev yarn add [package] --dev
(不适用) yarn add [package] --peer
npm install [package] --save-optional yarn add [package] --optional
npm install [package] --save-exact yarn add [package] --exact
(不适用) yarn add [package] --tilde
npm install [package] --global yarn global add [package]
npm update --global yarn global upgrade
npm rebuild yarn install --force
npm uninstall [package] yarn remove [package]
npm cache clean yarn cache clean [package]
rm -rf node_modules && npm install yarn upgrade

参考

  1. Yarn 中文网
  2. Yarn vs npm:你需要知道的一切

发表评论

电子邮件地址不会被公开。 必填项已用*标注