Yarn 安装与配置镜像源方法
安装 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 常用命令对照
| yarn | npm | 说明 |
|---|---|---|
yarn | npm install | 安装全部依赖 |
yarn add pkg | npm i pkg | 装到 dependencies |
yarn add -D pkg | npm i -D pkg | 装到 devDependencies |
yarn remove pkg | npm uninstall pkg | 卸载依赖 |
yarn global add | npm i -g | 全局安装 |
yarn upgrade | npm update | 更新依赖 |
yarn upgrade-interactive | 无直接对应 | 交互式选择更新 |
yarn install --frozen-lockfile | npm ci | 严格按 lock 安装(CI) |
yarn why pkg | npm 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 自己就会拦。

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