Please enable Javascript to view the contents

Yarn包管理工具

 ·  ☕ 5 分钟

Yarn简介

官网Yarn

Facebook、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具 — Yarn,正如官方文档中写的,Yarn 是为了弥补 npm 的一些缺陷而出现的。

从 npm 迁移到 Yarn 成本几乎为零

Yarn的优势:

  • 速度超快:Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快。
  • 离线模式:如果你以前安装过某个包,再次安装时可以在没有任何互联网连接的情况下进行。
  • 一致性:不管安装顺序如何,相同的依赖关系将在每台机器上以相同的方式安装。
  • 网络弹性:重试机制确保单个请求失败并不会导致整个安装失败。
  • 扁平模式:将依赖包的不同版本归结为单个版本,以避免创建多个副本。

Yarn安装

使用 scoop 安装 yarn 的记录

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ scoop install yarn
WARN  Scoop uses 'aria2c' for multi-connection downloads.
WARN  Should it cause issues, run 'scoop config aria2-enabled false' to disable it.
Installing 'yarn' (1.21.1) [64bit]
Loading yarn-1.21.1.msi from cache.
Checking hash of yarn-1.21.1.msi ... ok.
Extracting yarn-1.21.1.msi ... done.
Linking D:\Scoop\Applications\apps\yarn\current => D:\Scoop\Applications\apps\yarn\1.21.1
Persisting cache
Persisting mirror
Persisting global
Running post-install script...
yarn config v1.21.1
success Set "cache-folder" to "D:\\Scoop\\Applications\\apps\\yarn\\current\\cache".
Done in 0.12s.
yarn config v1.21.1
success Set "yarn-offline-mirror" to "D:\\Scoop\\Applications\\apps\\yarn\\current\\mirror".
Done in 0.12s.
yarn config v1.21.1
success Set "global-folder" to "D:\\Scoop\\Applications\\apps\\yarn\\current\\global".
Done in 0.12s.
yarn config v1.21.1
success Set "prefix" to "D:\\Scoop\\Applications\\apps\\yarn\\current\\global".
Done in 0.12s.
'yarn' (1.21.1) was installed successfully!

重点关注上面信息中几个路径:

  • cache-folder
  • yarn-offline-mirror
  • global-folder
  • prefix

scoop 默认将其设置在 \\apps\\yarn\\curent 目录下,个人感觉这应该是不合理的,因为当 yarn 升级之后, curent 指向的位置将会改变。我们可以参考下面的 npm 的配置,对其进行修改

cache = "D:\\Scoop\\Applications\\persist\\nodejs-lts\\cache"
prefix = "D:\\Scoop\\Applications\\persist\\nodejs-lts\\bin"

修改Yarn镜像源

1
2
3
4
5
6
7
# 查看现有源
$ yarn config get registry
https://registry.yarnpkg.com
# 临时修改
yarn save 软件名 --registry https://registry.npm.taobao.org/
# 全局修改
yarn config set registry https://registry.npm.taobao.org/

也可以一个第三方软件 yrm 来快速切换不同的源(它对标npm的nrm)。

yrm 的安装和使用:

1
2
3
4
5
6
7
8
# 安装
$ npm install -g yrm
# 查看帮助
$ yrm -h
# 列出可用源
$ yrm ls
# 切换源
$ yrm use taobao

Yarn使用

参考官网上的官方文档可以很容易的入门。

Yarn的工作流

  1. 创建一个新项目工程 yarn init
  2. 添加/更新/删除依赖关系
  3. 安装/重新安装你的依赖
  4. 使用版本控制工具git
  5. 持续集成
  • 初始化项目

    1
    
    yarn init # 同npm init,执行输入信息后,会生成package.json文件
    
  • 添加包(会更新package.json和yarn.lock):

    yarn 不推荐全局安装

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    yarn add [package] # 在当前的项目中添加一个依赖包,会自动更新到package.json和yarn.lock文件中
    yarn add [package]@[version] # 安装指定版本,这里指的是主要版本,如果需要精确到小版本,使用-E参数
    yarn add [package]@[tag] # 安装某个tag(比如beta,next或者latest)
    #不指定依赖类型默认安装到dependencies里,你也可以指定依赖类型:
      
    yarn add --dev/-D # 加到 devDependencies
    yarn add --peer/-P # 加到 peerDependencies
    yarn add --optional/-O # 加到 optionalDependencies
    #默认安装包的主要版本里的最新版本,下面两个命令可以指定版本:
      
    yarn add --exact/-E # 安装包的精确版本。例如yarn add [email protected]会接受1.9.1版,但是yarn add [email protected] --exact只会接受1.2.3版
    yarn add --tilde/-T # 安装包的次要版本里的最新版。例如yarn add [email protected] --tilde会接受1.2.9,但不接受1.3.0
      
    # 相关介绍
    dependencies: 正常的运行过程中的依赖 浏览器跑的时候
    devDependencies: 开发模式 所用的依赖
    peerDependencies: 当你发布项目的时候 可以指定该依赖
    optionalDependencies: 可有可无,表示在安装失败的时候一个备选的依赖保证过程
    bundleDependencies: 发布项目的时候所用的依赖 不是从npm来的 一起打包发布到npm上
    
  • 更新包

    1
    2
    3
    4
    
    yarn upgrade #用于更新包到基于规范范围的最新版本
    yarn upgrade webpack
    yarn upgrade [package]@[version]
    yarn upgrade [package]@[tag]
    
  • 安装包:

    1
    2
    3
    4
    5
    6
    
    yarn install #安装package.json里所有包,并将包及它的所有依赖项保存进yarn.lock
    yarn install --flat #安装一个包的单一版本
    yarn install --force #强制重新下载所有包
    yarn install --production #只安装dependencies里的包
    yarn install --no-lockfile #不读取或生成yarn.lock
    yarn install --pure-lockfile #不生成yarn.lock
    
  • 移除一个包

    1
    
    yarn remove <packageName> #移除一个包,会自动更新package.json和yarn.lock
    
  • 发布包

    1
    
    yarn publish
    
  • yarn的配置项:

    1
    2
    3
    4
    5
    6
    7
    
    yarn config list # 显示所有配置项
    yarn config get <key> #显示某配置项
    yarn config delete <key> #删除某配置项
    yarn config set <key> <value> [-g|--global] #设置配置项
    yarn config set registry https://registry.npm.taobao.org  # 修改镜像获取位置
    yarn config set init-license BSD-2-Clause
    yarn config get init-license
    
  • 运行脚本

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    
    yarn run #用来执行在 package.json 中 scripts 属性下定义的脚本
      
    # -----------------
     package.json
     {
       "name": "my-package",
       "scripts": {
        "build": "babel src -d lib",
        "test": "jest"
       }
     }
    # -----------------
     yarn run [script] [-- <args>]
     yarn run test
     yarn run test -- -o --watch 执行jest -o --watch
     yarn run 没有参数的的话 会列出所有的scripts里的执行脚本
    
  • 缓存

    1
    2
    3
    4
    5
    6
    7
    8
    
    yarn cache
    yarn cache list # 列出已缓存的每个包
    yarn cache ls # 检查本地是否有当前包
    yarn cache dir # 返回 全局缓存位置
    yarn cache clean # 清除缓存
    # 改变默认的缓存目录
    yarn config set cache-folder <path>
    yarn <command> --cache-folder <path>
    
  • 离线安装 --offline

    1
    2
    
    # 示例
    yarn add browser-sync --offline
    
  • 显示包的详细信息

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    yarn info <package> [<field>] #可以用来查看某个模块的最新版本信息
      
    # 示例
    yarn info react
    yarn info react --json # 以json的格式显示
    yarn info [email protected] # 查看详细版本信息
    yarn info react description # 只看描述信息
    yarn info react time
    ## 如果指定的字段是又一个嵌套对象,返回子树
    yarn info react readme 读取readme字段
    
  • 全局安装(Yarn不推荐将依赖安装在全局环境

    1
    2
    
    yarn global <add/bin/ls/remove/upgrade> [--prefix]
    yarn global add weback  ## 把包安装在全局的环境下面
    
  • yarn why

    1
    2
    3
    4
    
    yarn why jest  # 确定为什么包已经安装,详细描述其他包依赖于它
    # 可以是一个文件夹 也可以是一个js文件
    yarn why node_modules/once
    yarn why node_modules/once/once.js
    

Yarn的配置文件

配置文件为: ~/.yarnrc

对应 yarn config 命令,官方不建议手动修改 .yarnrc 文件

离线镜像(脱机镜像)

离线镜像(Offline mirror)与缓存(cache)的区别:

“Offline mirror” is different from cache that both npm CLI and Yarn have. Caches store already unzipped tarballs downloaded from registry, they also can be implementation specific and may be invalid between multiple versions of CLI tools. The tarballs in “Offline mirror” can be consumed by any version Yarn that will build cache based on them. It is also easier to store files when they are compressed.

“离线镜像"不同于npm CLI和Yarn都具有的缓存。缓存存储了从源镜像中下载的已解压缩的 tarball,它们也可能是特定于实现的,并且在多个版本的CLI工具之间可能无效。但是任何版本的Yarn都可以使用"脱机镜像"中的 tarball,它将基于它们构建缓存。压缩文件时,也更容易存储文件。

参考:

您的鼓励是我最大的动力
alipay QR Code

Felix
作者
Felix
如无必要,勿增实体。

3

目录