Yarn no puede encontrar el registro privado de Github npm

8

Me inscribí en la versión beta del registro privado npm de Github y seguí sus instrucciones: https://github.com/features/package-registry

Funciona muy bien con npm pero prefiero usar hilo. Y aunque npm no tiene problemas para encontrar el paquete registrado, yarn no puede encontrarlo en absoluto.

yarn add @omniphx/adminite-adminite-ui-components salidas:

yarn add v1.19.0
info No lockfile found.
warning package-lock.json found. Your project contains lock files generated by tools other than Yarn. It is advised not to mix package managers in order to avoid resolution inconsistencies caused by unsynchronized lock files. To clear this warning, remove package-lock.json.
[1/4] 🔍  Resolving packages...
error Couldn't find package "@omniphx/adminite-ui-components" on the "npm" registry.
info Visit https://yarnpkg.com/en/docs/cli/add for documentation about this command.

Después de leer en repositorios privados con hilo, pensé que el truco se debía a que el hilo tenía un formato rc ligeramente diferente. Desafortunadamente, eso tampoco funcionó y Yarn todavía no puede encontrar el registro privado.

.npmrc

registry=https://registry.npmjs.org
@omniphx:registry=https://npm.pkg.github.com/omniphx

.yarnrc

registry "https://registry.npmjs.org"
"@omniphx:registry" "https://npm.pkg.github.com/omniphx"

También confirmó que mi token github también está configurado con yarn config list:

yarn config v1.19.0
info yarn config
{
  'version-tag-prefix': 'v',
  'version-git-tag': true,
  'version-commit-hooks': true,
  'version-git-sign': false,
  'version-git-message': 'v%s',
  'init-version': '1.0.0',
  'init-license': 'MIT',
  'save-prefix': '^',
  'bin-links': true,
  'ignore-scripts': false,
  'ignore-optional': false,
  registry: 'https://registry.npmjs.org',
  'strict-ssl': true,
  'user-agent': 'yarn/1.19.0 npm/? node/v12.11.1 darwin x64',
  email: '[email protected]',
  lastUpdateCheck: 1570679687836,
  username: 'omniphx',
  '@omniphx:registry': 'https://npm.pkg.github.com/omniphx'
}
info npm config
{
  '//npm.pkg.github.com/:_authToken': 'fake12345',
  registry: 'https://registry.npmjs.org',
  '@omniphx:registry': 'https://npm.pkg.github.com/omniphx',
  python: '/usr/bin/python'
}

¿Alguna idea?


Resuelto

Changed "@myorg:registry" "https://npm.pkg.github.com/myorg"
To      "@myorg:registry" "https://npm.pkg.github.com"
Matthew Mitchener
fuente
¿Esto soluciona ayuda en su caso? stackoverflow.com/questions/58430182/…
peterevans

Respuestas:

9

Me acabo de encontrar con una situación similar. Parecía que yarnsolo estaba buscando en el registro principal de paquetes de Yarn el paquete privado de mi organización. Copié los ejemplos de la documentación de paquetes de GitHub para construir su .npmrcarchivo directamente en el .yarnrcarchivo del proyecto que consumirá la aplicación, sin saber que los formatos eran diferentes (nunca antes había tenido que lidiar con .yarnrcarchivos).

Sin embargo, después de actualizar el .yarnrcarchivo con el formato correcto que mencionó anteriormente (que también encontré buscando en Google), yarnencontré con éxito el paquete privado y lo instalé correctamente.

Como aviso , mi yarnversión: 1.17.3

Pasos que tomé

  1. Iniciar nueva sesión de terminal
  2. cd al proyecto
  3. nvm use (si tiene una versión de nodo específica para usar)
  4. Agregue el .yarnrcarchivo con el formato correcto al proyecto. Vea a continuación cómo se ve.
  5. Agregar manualmente el paquete y el rango de versiones package.jsonpara mi paquete privado
  6. correr npm login --registry=https://npm.pkg.github.com --scope=@MyOrg
    • Vea la nota a continuación sobre el alcance / org gotcha's
  7. correr yarn

Eso funcionó para mí.

.yarnrc

"@myorg:registry" "https://npm.pkg.github.com"

Nota : Vea a continuación una nota sobre el nombre de la organización / alcance gotcha's

Otras notas

Sé que parece que no tiene ningún problema con esto, dado su nombre de usuario / alcance de GH anterior, pero para cualquier otra persona que venga aquí, la documentación sobre GH es un poco escasa con respecto a la asignación de su nombre de usuario / nombre de organización a un alcance en el nombre del paquete. Solo recuerda estos pequeños trucos aquí:

  • El nombre de su paquete siempre debe tener un alcance para su organización (o nombre de usuario)
    • P.ej, name: @johndturn/my-package
  • Si su organización tiene letras mayúsculas, como MyOrg, simplemente reemplácelas en el nombre del paquete en su package.json y su .yarnrccon minúsculas
    • P.ej, name: @myorg/my-package
    • Nota : Al autenticar con npm login, todavía he mantenido las letras mayúsculas en el --scope=argumento.
  • El nombre de su paquete no tiene que ser el mismo nombre del repositorio.
    • Por ejemplo, para un repositorio llamado MyOrg/random-prefix.js-lib, puede tener name: @myorg/js-liben su package.jsonarchivo el proyecto en sí. Luego, instalarlo en otros proyectos se verá algo así @myorg/js-lib: 1.0.0.
John T
fuente
También funcionó para mí, gracias. Ahora descubro cómo configurarlo en mi CI, que no se ejecuta en Github Actions sino en jenkins.
Dhwaneet Bhatt
@DhwaneetBhatt gran pregunta, y debería ser bastante sencilla, con algunas suposiciones. Si está ejecutando en Jenkins con Pipelines y a Jenkinsfile, supongo que simplemente puede agregar los comandos anteriores (como npm login ...) en su Jenkinsfile, en un paso previo a la compilación. Esto también supone que tiene a Jenkins autenticado con algún tipo de usuario en su organización de GitHub que tiene los privilegios correctos para extraer paquetes de su organización. Dicho esto, todavía no lo he implementado para nuestros cuadros de Jenkins, pero le avisaré cuando lo haga (si varía de lo que he mencionado).
John T
2
¡Gracias por la respuesta! Parece que mi problema era que tenía en "@myorg:registry" "https://npm.pkg.github.com/myorg"lugar de "@myorg:registry" "https://npm.pkg.github.com". Extraño que esa misma url funcionó bien en mi.npmrc
Matthew Mitchener
Parece que @MatthewMitchener encontró la respuesta más simple: simplemente deje el /myorgfinal en su .npmrc, y luego el Registro de paquetes GitHub funciona con hilo o npm. (Sin necesidad de un separado .yarnrc.)
medmunds
2

No soy un experto en npm / yarn, por lo que podría estar malinterpretando lo que está sucediendo aquí, pero todavía no creo que el proxy del paquete del registro npm funcione con yarn. ¿Podría estar relacionado? Cuando se lanzó el paquete proxy para npm, recuerdo haber leído comentarios en Twitter de personas que lo probaron con hilo y no funcionó.

Encontré el hilo de Twitter aquí: https://twitter.com/github/status/1171832034580451328

No funciona con Yarn. Tan pronto como cambie la URL del registro -> No se pudo encontrar el paquete.

peterevanos
fuente
1

El problema que tuve es ligeramente diferente.

Después de probar lo que John sugirió, todavía no puedo agregar paquetes de registro privado con yarn(pero perfectamente bien con npm)

Entonces me doy cuenta de dos cosas:

Para los paquetes de GitHub, npmestá bien con cualquiera

registry=https://npm.pkg.github.com/my-org

o

@my-org:registry=https://npm.pkg.github.com

pero yarnsolo permite la última sintaxis.

Los documentos del sitio web de Github solo muestran la primera sintaxis que podría causar problemas a los usuarios de hilo.

Otra cosa es que si va npm loginal registro privado pero usa un .yarnrcarchivo en su proyecto, yarn realmente no puede mezclar sus npmcredenciales con él. Aunque parece comportarse de manera diferente en un entorno diferente.

Pero parece ser una buena práctica seguir con yarn login+ .yarnrco npm login+ .npmrc(aún puede usar hilo para administrar sus paquetes en ambos casos)

Xinan
fuente