El título es un poco complicado. En más palabras: cuando .npmrc
(o, presumiblemente, .yarnrc
) se configuran con _ambos_ una URL de registro privada _y_ un token de autenticación para publicar en npm público, la instalación de paquetes con ámbito se rompe. El registro privado en cuestión aquí es Artifactory, y la teoría actual es que Yarn está enviando los créditos (_inpropiadamente_: la configuración es para dos URL diferentes), con lo que Artifactory no está contento, y 401 (dado que los créditos son para npm público, no artefactorio). No estoy seguro de por qué los paquetes con ámbito se tratarían de manera diferente, ya que de lo contrario funciona bien.
A continuación se muestran algunos comandos para ilustrar:
> pwd
~
> cat .yarnrc
cat: .yarnrc: No such file or directory
> cat .npmrc
registry=<private registry URL that works fine with npm and non-scoped packages>
//registry.npmjs.org/:_authToken=<my auth token>
> yarn add @types/d3-scale --verbose
yarn add v0.19.1
info No lockfile found.
verbose Performing "GET" request to "https://yarnpkg.com/latest-version".
[1/4] 🔍 Resolving packages...
verbose Performing "GET" request to "<correct private registry URL ...>/@types%2fd3-scale".
verbose Request "<correct private registry URL ...>/@types%2fd3-scale" finished with status code 401.
verbose Error: Couldn't find package "@types/d3-scale" on the "npm" registry.
at MessageError (/usr/local/Cellar/yarn/0.19.1/libexec/lib/node_modules/yarn/lib/errors.js:8:5)
at /usr/local/Cellar/yarn/0.19.1/libexec/lib/node_modules/yarn/lib/resolvers/registries/npm-resolver.js:207:15
at next (native)
at step (/usr/local/Cellar/yarn/0.19.1/libexec/lib/node_modules/yarn/node_modules/babel-runtime/helpers/asyncToGenerator.js:17:30)
at /usr/local/Cellar/yarn/0.19.1/libexec/lib/node_modules/yarn/node_modules/babel-runtime/helpers/asyncToGenerator.js:28:13
at process._tickCallback (internal/process/next_tick.js:103:7)
error Couldn't find package "@types/d3-scale" on the "npm" registry.
info Visit https://yarnpkg.com/en/docs/cli/add for documentation about this command.
> npm install @types/d3-scale
~
└─┬ @types/[email protected]
└── @types/[email protected]
> yarn add d3-scale
yarn add v0.19.1
info No lockfile found.
[1/4] 🔍 Resolving packages...
[2/4] 🚚 Fetching packages...
[3/4] 🔗 Linking dependencies...
[4/4] 📃 Building fresh packages...
success Saved lockfile.
success Saved 8 new dependencies.
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
└─ [email protected]
✨ Done in 2.45s.
# edit .npmrc...
> cat .npmrc
registry=<same registry URL>
> yarn add @types/d3-scale
yarn add v0.19.1
warning No license field
[1/4] 🔍 Resolving packages...
[2/4] 🚚 Fetching packages...
[3/4] 🔗 Linking dependencies...
[4/4] 📃 Building fresh packages...
success Saved lockfile.
success Saved 2 new dependencies.
├─ @types/[email protected]
└─ @types/[email protected]
warning No license field
✨ Done in 1.50s.
Para obtener información adicional, la instancia de Artifactory está configurada para permitir el acceso anónimo. Si no proporciona credenciales, puede leer lo que quiera. Si proporciona credenciales, Artifactory intenta validarlas y devuelve el estado 401 (en este caso, porque el usuario no existe).
Creo que esta es la línea de código ofensiva: https://github.com/yarnpkg/yarn/blob/master/src/registries/npm-registry.js#L56 (la última cláusula).
Al leer en contexto, parece que el autor asume que "con alcance" implica "autenticado".
Tuve exactamente el mismo problema el viernes pasado, tuve que eliminar el token de autenticación de ~ / .npmrc para poder descargar el paquete con alcance desde el artefacto local.
Comentario más útil
Creo que esta es la línea de código ofensiva: https://github.com/yarnpkg/yarn/blob/master/src/registries/npm-registry.js#L56 (la última cláusula).
Al leer en contexto, parece que el autor asume que "con alcance" implica "autenticado".