Ir al contenido

Usar yarn 2 / 3 / 4 con Pier

Yarn berry (yarn 2, 3 y 4) reemplazó .npmrc por .yarnrc.yml en 2019. La configuración del registro se traslada allí, y hay una peculiaridad equivalente al always-auth=true de yarn 1:

npmAlwaysAuth: true es obligatorio. Sin él, yarn 4 solo envía el bearer en npm publish — no en npm install. La misma causa raíz que en yarn 1; archivo de configuración distinto.

.yarnrc.yml en la raíz del proyecto:

npmRegistryServer: "https://YOUR-PIER-HOST/registry/npm/"
npmAuthToken: "pier_npm_…"
npmAlwaysAuth: true
nodeLinker: node-modules

nodeLinker: node-modules desactiva el plug’n’play por defecto de yarn berry y vuelve al familiar diseño de node_modules — recomendado salvo que tu cadena de herramientas soporte PnP explícitamente.

package.json necesita fijar packageManager para que corepack elija el binario correcto:

{
"name": "my-app",
"version": "0.1.0",
"packageManager": "[email protected]"
}
Ventana de terminal
corepack enable
yarn install
yarn add left-pad
yarn add @your-org/internal-lib

Corepack lee packageManager de package.json y ejecuta esa versión exacta de yarn, descargándola en el primer uso.

Ventana de terminal
yarn npm publish --access public # público con scope
yarn npm publish # paquete privado

Observa el espacio de nombres npm: los subcomandos de la CLI de berry se sitúan bajo yarn npm <subcommand> (publish, login, whoami, info, tag) para distinguirlos de los comandos propios de yarn.

Ventana de terminal
yarn npm login --scope=@your-org
# Solicita usuario + contraseña + email + OTP

O bien omite el login interactivo y simplemente pon npmAuthToken directamente en .yarnrc.yml — funciona igual. El token proviene de Packages → Manage tokens en el panel de Pier.

Ventana de terminal
yarn npm tag add @your-org/[email protected] beta
yarn npm tag list @your-org/lib
yarn npm tag remove @your-org/lib beta
yarn berryEstadoNotas
2.4.3Probado en la matriz de pier-tests
3.8.7Probado en la matriz de pier-tests
4.5.1Probado en la matriz de pier-tests

Las tres versiones mayores de berry comparten la misma forma de .yarnrc.yml — fija la versión que quieras mediante packageManager en package.json, corepack hace el resto.

  • YN0041: Invalid authentication (as an anonymous user) — falta npmAlwaysAuth: true.
  • YN0027: <pkg> can't be resolved to a satisfying range — el registro no es accesible (error tipográfico en la URL) o el proxy upstream está desactivado y el paquete no es privado.
  • Corepack is about to download … — la primera ejecución con una versión fijada descarga el binario. Es seguro confirmar; o ejecuta de antemano COREPACK_ENABLE_AUTO_PIN=0 corepack prepare [email protected] --activate.

Enrutamiento de registro por scope (opcional)

Sección titulada «Enrutamiento de registro por scope (opcional)»

Si quieres que un scope vaya a Pier y todo lo demás a npmjs.org sin activar el proxy upstream en Pier, asigna el registro al scope:

npmScopes:
your-org:
npmRegistryServer: "https://YOUR-PIER-HOST/registry/npm/"
npmAuthToken: "pier_npm_…"
npmAlwaysAuth: true

La mayoría de los equipos simplemente activa el proxy y enruta todo a través de Pier — pero esto también funciona.