◆

Yarn 安装与配置镜像源方法

2023-02-02 01:370

安装 yarn

npm install -g yarn

设置镜像源:

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

node-sass 镜像源:

yarn config set sass-binary-site http://npm.taobao.org/mirrors/node-sass

域名已经变了

npm.taobao.org 这个域名在 2022 年 5 月停止解析,官方迁到了 npmmirror.com。老域名的 HTTPS 证书也早已过期,现在照上面写会直接连不上。正确的地址是:

yarn config set registry https://registry.npmmirror.com
yarn config set sass-binary-site https://npmmirror.com/mirrors/node-sass

顺带说,node-sass 本身也该退休了。它依赖 LibSass(已停止维护)并且需要编译原生模块,Node 版本升级经常导致二进制不匹配、要重新 npm rebuild。现在应该换成纯 JS 实现的 sass(Dart Sass):

yarn remove node-sass && yarn add -D sass

换掉之后就不需要 sass-binary-site 这类镜像配置了,因为不再有原生二进制要下载。

查看和清理配置

# 看当前生效的所有配置
yarn config list

# 看单项
yarn config get registry

# 删掉某项,回到默认
yarn config delete registry

Yarn 1 的用户级配置存在 ~/.yarnrc,项目级配置放在项目根的 .yarnrc,项目级优先。Yarn 2+(Berry)换成了 YAML 格式的 .yarnrc.yml,字段名也变了,两者不通用:

# .yarnrc.yml(Yarn 2+)
npmRegistryServer: 'https://registry.npmmirror.com'

所以看到项目里有 .yarnrc.yml 就说明这是 Berry 项目,别用 Yarn 1 的命令去改配置,改了不生效。

安装 Yarn 的推荐方式

npm install -g yarn 现在不是首选了。Node 16.10 之后内置了 Corepack,它能按项目声明的版本自动切换包管理器,避免「本地是 Yarn 1、项目要 Yarn 3」这类版本错配:

# 启用 corepack(一次性)
corepack enable

# 项目里声明用哪个版本,之后进这个目录自动生效
yarn set version stable

声明会写进 package.json:

{
  "packageManager": "yarn@4.1.0"
}

packageManager 字段是 Corepack 认的标准字段,pnpm 和 npm 同样支持。CI 里有了它就不用再手动装包管理器,corepack enable 一句搞定,并且版本和本地严格一致。

Yarn 1 常用命令对照

yarnnpm说明
yarnnpm install安装全部依赖
yarn add pkgnpm i pkg装到 dependencies
yarn add -D pkgnpm i -D pkg装到 devDependencies
yarn remove pkgnpm uninstall pkg卸载依赖
yarn global addnpm i -g全局安装
yarn upgradenpm update更新依赖
yarn upgrade-interactive无直接对应交互式选择更新
yarn install --frozen-lockfilenpm ci严格按 lock 安装(CI)
yarn why pkgnpm ls pkg查依赖来源和版本

yarn upgrade-interactive 是 Yarn 1 相比当年 npm 最有竞争力的功能之一,能按 patch / minor / major 分组勾选。

混用包管理器会出问题

同一个项目里既有 yarn.lock 又有 package-lock.json,不同人用不同工具装依赖,最终装出来的依赖树可能不同——两个 lock 文件各自记录了一套解析结果,谁也不认谁。这类问题的表现是「我这儿好的,你那儿报错」,排查起来很费时间。

防住它的办法是在 package.json 里加个 preinstall 钩子:

{
  "scripts": {
    "preinstall": "npx only-allow yarn"
  }
}

用错工具会直接被拦下并给出提示。配了 packageManager 字段并且团队都开了 Corepack 的话,Corepack 自己就会拦。

💬留言板0

还没有留言,来发表第一条吧~

PAGE LOAD / LIVEYarn 安装与配置镜像源方法加载中