yarn 使用
Get started
macOS
- 使用脚本安装,每次安装的都是最新版:
curl -o- -L https://yarnpkg.com/install.sh | bash
如需升级,再次运行此命令,然后会出现以下信息:
/Users/xxx/.yarn already exists, possibly from a past Yarn install.
> Remove it (rm -rf /Users/xxx/.yarn) and run this script again.
根据提示,由于已经安装了 yarn,所以需要先删除~/.yarn
文件,然后再重新执行该命令,即可安装最新版 yarn。
- 通过
Homebrew
安装:
brew install yarn
# upgrade yarn
brew upgrade yarn
安装过程中会安装很多依赖包,也包括 nodejs,要确保 Homebrew 连接流畅,国内可以使用 ustc 镜像进行加速:

1, 2 安装方式的好处就是如果使用nvm
管理node
的版本,那么每次对node
进行版本升级之后,无需重新安装yarn
,但安装的时候可能会稍微慢点。
- 通过
npm
安装/升级最新版本:
npm install -g yarn@latest
可以查看 yarn 历史版本:
npm view yarn versions --json
安装指定版本的 yarn:
npm install -g yarn@1.19.2
如果使用nvm
管理node
的版本,那么每次对node
进行版本升级之后,都需要重新安装yarn
,因为通过 npm i -g
方式安装的全局包和 node 版本挂钩,导致全局包全部丢失。不过,通过 yarn global add
方式添加的全局包不会丢失,对应包的 bin cli 也可以正常使用,原因参考 yarn global。
Windows
-
下载最新的.msi 文件,点击这里下载,跟随指引安装即可。
-
通过
Chocolatey
安装。Chocolatey
是一个 Windows 专用的软件包管理工具,请按照此说明安装Chocolatey
。安装成功后,在控制台执行如下命令安装 yarn:
choco install yarn
更新 yarn:
choco update yarn
- 通过
Scoop
安装。Scoop
是一个用于 Windows 的基于命令行的安装工具。 请按照此说明安装Scoop
。安装Scoop
后,在控制台执行如下命令安装yarn
:
scoop install yarn
更新 yarn:
scoop update yarn
Check installation
yarn --version
安装成功会显示对应的版本号:
1.19.2
Uninstall yarn
- 如果是 npm 安装的,则可通过命令
npm uninstall yarn -g
卸载 yarn - 可通过
yarn global bin
命令找到 yarn 全局安装的根目录,然后删除 yarn 文件夹即可
rm -rf /usr/local/bin/yarn
- 如果是通过
Chocolatey
安装的,可以通过choco uninstall yarn
命令卸载 yarn - 如果是通过
Scoop
安装的,可以通过scoop uninstall yarn
命令卸载 yarn
yarn init
初始化一个新项目
yarn add
新增一个依赖,添加到 package.json 文件的dependencies
属性中
yarn add [package]
yarn add [package]@[version]
yarn add [package]@[tag]
yarn add [package]
默认添加的是 ^
符号,详情见 Package Version。
加上参数--dev
或者-D
,添加package
依赖到devDependencies
属性中
yarn add [package] --dev
yarn add [package] -D
加上参数--peer
或者-P
,添加package
依赖到peerDependencies
属性中
yarn add [package] --peer
yarn add [package] -P
加上参数--optional
或者-O
,添加package
依赖到optionalDependencies
属性中
yarn add [package] --optional
yarn add [package] -O
See more: https://yarnpkg.com/cli/add
yarn remove
移除依赖包
yarn remove [package]
yarn install
安装 package.json 文件里定义 的所有依赖包
yarn
或者
yarn install
yarn cache
列出匹配指定模式的已缓存的包
yarn cache list [--pattern]
打印出当前的 yarn 全局缓存在哪里
yarn cache dir
清除全局缓存,下次运行 yarn 或者 yarn install 时会重新填充
yarn cache clean
yarn config
yarn config set <key> <value> [-g|--global]
例如设置镜像源为淘宝镜像:
yarn config set registry http://registry.npm.taobao.org
例如修改 package.json -> scripts 中运行的 shell,比如 "start": "source variables.sh; node app.js",因为 Unix-like OS 默认是 /bin/sh
,用该配 置指明 shell 可以保证不同机器上运行 source
命令不会出错:
yarn config set script-shell /bin/bash
配置也可以放在项目的 .yarnrc
或 .npmrc
文件中。
其他常用命令:
yarn config get <key>
yarn config delete <key>
yarn config list # Displays the current configuration.
yarn create
从任何 create-*
初学者工具包创建新项目
yarn create <starter-kit-package> [<args>]
这个命令包含两个功能:
-
安装工具包,或者更新包到最新版本
-
执行新手工具包
package.json
中bin
字段指向的程序,并向他转发所有的<args>
以yarn create react-app my-app
命令为例,它等价于:
yarn global add create-react-app
create-react-app my-app
yarn global
yarn global
是一个命令前缀,可用于 add
、bin
、list
和 remove
等命令,在原有行为基础上用一个全局目录来存储包
与 npm 不同,在 yarn 中global
参数必须紧跟在 yarn 后才能将依赖全局添加,即必须为yarn global add package-name
的形式。如果写为yarn add global package-name
的形式,会把名为 global
和 package-name
的包添加到本地,而非全局添加 package-name
。
通过 yarn 安装的全局包(无论 yarn 的安装方式),会放在~/.config/yarn/global/node_modules
里面。
# if has installed global packages via yarn
$ ll ~/.config/yarn/global
node_modules
package.json
yarn.lock
yarn global bin
查看 yarn 全局安装的 bin 文件夹地址:
$ yarn global bin
/usr/local/bin
$ ll

如上图 pm2
被安装在了全局,在 cli 中输入 pm2
将执行 yarn global 的 pm2,无论是否安装 npm i -g pm2
。
千万不要 yarn global add npm
(如果 macOS 更新后或其他未知原因也可能导致出现以下问题),它会在 /usr/local/bin
中创建两个软链:npm
和 npx

将会导致无论用 nvm 怎么切换 node 或重新安装 npm,都会使 npm 的版本锁定在 yarn global 中 npm 的版本,如果 yarn global 中 npm 的版本过低,可能还会导致以下错误,没踩过坑的话会非 常难以定位到该问题:


这时候也不要尝试升级 yarn global 中 npm 的版本,即使修改后版本兼容了,还有可能因为 yarn 中残留的 npm 版本问题导致以下错误:

最好通过 yarn global remove npm
删除或者全局包不多的话可以彻底删除 global 文件夹:
$ rm -rf ~/.config/yarn/global
yarn help
显示帮助信息,效果如下 :
Displays help information.
Options:
--cache-folder <path> specify a custom folder that must be used to store the yarn cache
--check-files install will verify file tree of packages for consistency
--cwd <cwd> working directory to use (default: /Users/sherryshen/code-other/docsite)
--disable-pnp disable the Plug'n'Play installation
......
yarn import
依据原 npm 安装后的node_modules
目录生成一份yarn.lock
文件
背景介绍:许多使用 npm shrinkwrap
或 node_modules
的项目无法轻易迁移到 Yarn,因为 yarn install
可能产生有很大差异的逻辑依赖关系树。不是所有树都可以用 Yarn 的 yarn.lock
表示,并且部分有效的树会在安装后自动按重复剔除。
yarn import 旨在使用在 node_modules
内找到的版本, 根据普通的 require.resolve()
解决规则生成一个 yarn.lock
文件以缓解这一重大问题。
yarn info
yarn info <package> [<field>]
拉取包的信息。以yarn info react
命令为例,在命令行输入:
yarn info react
打印的信息如下:
yarn info v1.19.2
warning package.json: No license field
{ name:
'react',
description:
'React is a JavaScript library for building user interfaces.',
'dist-tags':
{ latest:
'16.13.1',
next:
'0.0.0-d7382b6c4',
experimental:
'0.0.0-experimental-e5d06e34b',
canary:
'0.0.0-57333ca33',
unstable:
'0.0.0-da834083c' },
......
可以添加--json
参数,例如:yarn info react --json
,输出为JSON
行格式;还可以添加版本参数 @[version]
,例如:yarn info react@16.13.1
,以查看特定版本的信息
yarn list
yarn list 命令模仿 Unix 列目录命令的预期行为。 yarn list
命令列出当前工作文件夹所有的依赖,通过参考所有包管理器的元信息文件,包括项目的依赖。实现效果如下:
yarn list v1.19.2
├─ @babel/code-frame@7.8.3
│ └─ @babel/highlight@^7.8.3
├─ @babel/compat-data@7.9.0
│ ├─ browserslist@^4.9.1
│ ├─ invariant@^2.2.4
│ └─ semver@^5.5.0
......
默认情况下,所有包和它们的依赖会被显示。 如果要限制依赖的深度,可以给 list
命令添加一个标志 --depth
以控制所需的深度。注意:深度层级是从零索引的。
yarn list --depth=0
还可以根据 pattern 参数筛 选出依赖列表:
yarn list --pattern gulp
yarn list --pattern "gulp|grunt"
yarn list --pattern "gulp|grunt" --depth=1
yarn login
此命令用来登录自己的 npm 账号。根据提示分别输入注册账号时填写的用户名和邮箱,不需要输入密码。之后就可以运行 yarn publish
命令发布包,此时需要输入 npm 账号的密码才能成功发布。
yarn logout
退出登录 npm 账号
yarn publish
发布一个包到 npm 库
yarn publish
发布当前目录里 package.json
定义的包
yarn publish [tarball]
发布一个 .tgz
gzip 压缩文件定义的包
yarn publish [folder]
发布包含在指定目录里的包。 <folder>
package.json 应该指定包的细节
yarn publish --new-version <version>
使用version
的值,跳过对新版本的询问
yarn publish --tag <tag>
<tag>
参数为发布的包指定标签
yarn run
如果你已经在你的包里定义了 scripts,这个命令会运行指定的 script