在 Pier 中使用 yarn 2 / 3 / 4
Yarn berry(yarn 2、3 和 4)在 2019 年用 .yarnrc.yml 取代了 .npmrc。仓库配置迁移到了这里,并且有一个与 yarn 1 的 always-auth=true 等效的特殊之处:
npmAlwaysAuth: true是必需的。 没有它,yarn 4 只会在npm publish时发送 bearer——而npm install时不发送。根本原因与 yarn 1 相同,只是配置文件不同。
在项目根目录创建 .yarnrc.yml:
npmRegistryServer: "https://YOUR-PIER-HOST/registry/npm/"npmAuthToken: "pier_npm_…"npmAlwaysAuth: truenodeLinker: node-modulesnodeLinker: node-modules 会退出 yarn berry 默认的 plug’n’play,回退到熟悉的 node_modules 布局——除非你的工具链明确支持 PnP,否则推荐使用此选项。
package.json 需要固定 packageManager,以便 corepack 选取正确的二进制文件:
{ "name": "my-app", "version": "0.1.0",}安装 / 添加
Section titled “安装 / 添加”corepack enableyarn installyarn add left-padyarn add @your-org/internal-libCorepack 会从 package.json 读取 packageManager,并运行指定的确切 yarn 版本,首次使用时会自动下载。
yarn npm publish --access public # 作用域内的公共包yarn npm publish # 私有包注意 npm 命名空间:berry 的 CLI 子命令位于 yarn npm <subcommand> 之下(publish、login、whoami、info、tag),以便与 yarn 自身的命令区分开来。
yarn npm login --scope=@your-org# 提示输入用户名 + 密码 + 邮箱 + OTP或者跳过交互式登录,直接在 .yarnrc.yml 中填写 npmAuthToken——效果相同。令牌来自 Pier 面板中的 Packages → Manage tokens。
Dist-tags
Section titled “Dist-tags”yarn npm tag list @your-org/libyarn npm tag remove @your-org/lib beta| yarn berry | 状态 | 说明 |
|---|---|---|
| 2.4.3 | ✓ | 已在 pier-tests 矩阵中测试 |
| 3.8.7 | ✓ | 已在 pier-tests 矩阵中测试 |
| 4.5.1 | ✓ | 已在 pier-tests 矩阵中测试 |
这三个 berry 主版本共享相同的 .yarnrc.yml 结构——通过 package.json 中的 packageManager 固定你想要的版本,剩下的交给 corepack 处理。
YN0041: Invalid authentication (as an anonymous user)——缺少npmAlwaysAuth: true。YN0027: <pkg> can't be resolved to a satisfying range——仓库无法访问(URL 拼写错误),或上游代理已关闭且该包不是私有的。Corepack is about to download …——首次使用固定版本运行时会下载二进制文件。可以放心确认;或者预先设置COREPACK_ENABLE_AUTO_PIN=0 corepack prepare [email protected] --activate。
作用域仓库路由(可选)
Section titled “作用域仓库路由(可选)”如果你希望某个作用域走 Pier,而其他所有内容走 npmjs.org,且不想在 Pier 上启用上游代理,可以为该作用域单独指定仓库:
npmScopes: your-org: npmRegistryServer: "https://YOUR-PIER-HOST/registry/npm/" npmAuthToken: "pier_npm_…" npmAlwaysAuth: true大多数团队只是启用代理,让所有内容都通过 Pier 路由——但这种方式也可行。