8
votes

L'installation d'un package privé à partir du registre de packages Github à l'aide de Yarn échoue sans autorisation

Cette question est liée à ceux-ci. Mais aucune des solutions n'a fonctionné pour moi.

Je peux installer un package sans problème avec npm install @scope/package mais je ne peux pas faire la même chose avec yarn: yarn add @scope/package

yarn renvoie l'erreur suivante: An unexpected error occurred: "https://npm.pkg.github.com/download/@scope/package/1.2.8/089b08cffb16074c210ec3a59b04de268ae1c7b3a0492dce110adee3ada05bdd: Request failed \"401 Unauthorized\"".

mon fichier .npmrc ressemble à ceci: (essayé avec et sans ci-dessous .yarnrc)

registry=https://registry.yarnpkg.com/

@scope:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=MY_AUTHTOKEN
always-auth=true

J'ai essayé d'ajouter ce fichier .yarnrc:

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

(sans .yarnrc) J'ai essayé ce fichier .npmrc

registry=https://registry.npmjs.org/
//npm.pkg.github.com/:_authToken=MY_AUTHTOKEN
@scope:registry=https://npm.pkg.github.com/

MY_AUTHTOKEN est mon Personal Access Token que j'ai généré à partir de Github. (il a accès à tout dans les packages)

J'ai essayé de:

  • supprimer yarn.lock
  • supprimer .yarnrc
  • connectez-vous avec npm login utilisant mon PAT comme mot de passe
  • déconnexion de npm et suppression des .npmrc et .yarnrc globaux
  • connexion avec yarn login

En cas de confusion, je n'essaye pas réellement @scope et / package, mais ma portée réelle et le nom du package.

J'ai accès à la portée et au package sur Github.

et encore une fois ma première configuration fonctionne très bien avec npm. Mais je ne peux pas faire fonctionner cela avec du fil, et je ne peux pas trouver de solution existante valide sur SO.


0 commentaires

3 Réponses :


5
votes

Il vous suffit d'utiliser .npmrc à la racine de votre projet avec ce contenu:

//npm.pkg.github.com/:_authToken=GITHUB_PERSONAL_TOKEN
@OWNER:registry=https://npm.pkg.github.com

Gardez à l'esprit que GITHUB_PERSONAL_TOKEN a besoin des autorisations de portée read: packages afin de lire les packages à partir de votre dépôt privé.


0 commentaires

3
votes

Ce qui suit a fonctionné pour moi dans .npmrc

yarn add v1.22.4
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
success Saved 1 new dependency.
info Direct dependencies
└─ @mvce-superstars/hello-world-npm@1.1.1
info All dependencies
└─ @mvce-superstars/hello-world-npm@1.1.1
Done in 1.08s.

En utilisant yarn v2 , ce qui suit a fonctionné pour moi dans .yarnrc.yml :

yarn remove v1.22.4
[1/2] Removing module @mvce-superstars/hello-world-npm...
[2/2] Regenerating lockfile and installing missing dependencies...
success Uninstalled packages.
Done in 0.06s.

Tout d'abord, notez le nom de la portée en minuscules . C'est censé être le nom du propriétaire du référentiel ( MVCE-Superstars ) où le package a été publié, mais le nom doit être entièrement en minuscules.


La mise en place

Édition

  • J'ai créé une copie privée de ce référentiel hello-world .
  • J'ai copié le fichier .npmrc OU .yarnrc.yml ci-dessus dans le repoository.
  • Ensuite, je me suis connecté à l'aide de la npm login --registry=https://npm.pkg.github.com/ OU de la commande yarn npm login --scope=mvce-superstars
  • J'ai entré mon nom d'utilisateur github et mon jeton (avec les étendues read:package , write:package et repo )
  • Enfin, j'ai poussé le package dans mon dépôt privé en utilisant npm publish OU yarn npm publish

Production

.
├── node_modules
│   └── @mvce-superstars
├── package.json
└── yarn.lock

Téléchargement

  • Je crée un nouveau projet npm en utilisant npm init ( use-hello-world-npm )
  • Je copie le .npmrc ci-dessus à la racine du dossier
  • Ensuite, je me déconnecte de npm ( npm logout --registry=https://npm.pkg.github.com/ ) et je me reconnecte ( npm login --registry=https://npm.pkg.github.com/ ), juste pour être sûr
  • Enfin, je passe du yarn et comme c'était censé le faire, ça a marché!

Production

➤ YN0000: ┌ Resolution step
➤ YN0014: │ @mvce-superstars/hello-world-npm@npm:^1.1.1: Only some patterns can be imported from legacy lockfiles (not "https://npm.pkg.github.com/download/@mvce-superstars/hello-world-npm/1.1.1/426126f89734c2c76bfac0342c1de9c95ad003b6e905a7b9f9f745892c86da7a#5379c8030fa9c5f57e5baef67f2a8a784ce93361")
➤ YN0000: └ Completed in 0.55s
➤ YN0000: ┌ Fetch step
➤ YN0013: │ @mvce-superstars/hello-world-npm@npm:1.1.1::__archiveUrl=https%3A%2F%2Fnpm.pkg.github.com%2Fdownload%2F%40mvce-superstars%2Fhello-world-npm%2F1.1.1%2F426126f89734c2c76bfac0342c1de9c95ad003b6e905a7b9f9f745892c86da7a can't be found in the cache and will be fetched from the remote server
➤ YN0000: └ Completed in 1.3s
➤ YN0000: ┌ Link step
➤ YN0031: │ One or more node_modules have been detected and will be removed. This operation may take some time.
➤ YN0000: └ Completed
➤ YN0000: Done with warnings in 1.87s

fil v2

yarn install v1.22.4
info No lockfile found.
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
Done in 0.55s.

Contenu du dossier après le yarn

npm notice 
npm notice 📦  @mvce-superstars/hello-world-npm@1.1.1
npm notice === Tarball Contents === 
npm notice 16.3kB example.gif   
npm notice 89B    bin.js        
npm notice 175B   lib/index.js  
npm notice 734B   package.json  
npm notice 2.0kB  yarn-error.log
npm notice 570B   Readme.md     
npm notice 167B   init.sh       
npm notice === Tarball Details === 
npm notice name:          @mvce-superstars/hello-world-npm        
npm notice version:       1.1.1                                   
npm notice package size:  14.3 kB                                 
npm notice unpacked size: 20.0 kB                                 
npm notice shasum:        5379c8030fa9c5f57e5baef67f2a8a784ce93361
npm notice integrity:     sha512-FAI/Wuy4gHW8C[...]FINQeIlZ+HDdg==
npm notice total files:   7                                       
npm notice 
+ @mvce-superstars/hello-world-npm@1.1.1

Et pour faire bonne mesure, je le supprime ( yarn remove @mvce-superstars/hello-world-npm ):

npmScopes:
  "mvce-superstars":
    npmAlwaysAuth: true
    npmRegistryServer: "https://npm.pkg.github.com"

et ajoutez-le à nouveau ( yarn add @mvce-superstars/hello-world-npm ):

@mvce-superstars:registry=https://npm.pkg.github.com

Le référentiel est situé ici , donc si vous voulez voir par vous-même que cela a fonctionné comme je l'ai expliqué, commentez ci-dessous avec votre nom d'utilisateur sur github et je vous enverrai une invitation.

Sources:


3 commentaires

@MLyck l'exemple que j'ai montré essaie de reproduire votre problème en utilisant les informations que vous avez fournies. Il utilise un référentiel privé comme vous l'avez dit, j'ai également utilisé un PAT comme vous, et j'utilise du fil. Si cela a fonctionné pour moi, le problème n'est pas avec le fil, mais avec quelque chose d'autre dans votre configuration. Vous devez peut-être inclure plus d'informations sur votre configuration dans votre question.


peut-être, bien que j'en doute fortement. J'ai pu le résoudre avec Yarn2 et en utilisant le nouveau fichier yarnrc.yml assez facilement (sans autres changements), ce qui suggère qu'il s'agit d'un problème de Yarn. Cependant, votre réponse est absolument fantastique et sera probablement utile aux autres, vous avez clairement déployé des efforts pour cela et vous la testez, vous méritez donc certainement la réponse acceptée à cette question. Mais si cela ne fonctionne pas pour quelqu'un d'autre aussi. Essayez de passer à Yarn 2 :)


@MLyck Super. J'ai mis à jour ma réponse avec les résultats de l'utilisation de yarn v2.



0
votes

J'ajoute une réponse ici car après une journée à essayer différentes variantes de solutions ici et ailleurs, j'ai trouvé que mon problème était autre chose.

Mon problème était que, bien que npm ne soit pas sensible à la casse en ce qui concerne les noms de paquet, le yarn est quand il s'agit d'authentification! 🤦⠀ â ™ ‚ï¸

Donc, en utilisant l'exemple de cette solution :

registry=https://registry.yarnpkg.com/

@GITHUB_USERNAME:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=AUTH_TOKEN
always-auth=true

J'avais besoin de m'assurer de deux choses:

  1. @GITHUB_USERNAME doit correspondre à la casse que vous voyez sur github et au nom sous lequel le package a été publié. Par exemple, si votre nom d'utilisateur est Pickle-Rick, vous devez mettre @Pickle-Rick:registry=https://npm.pkg.github.com , pas @pickle-rick ou @Pickle-rick .

  2. Vous devez faire correspondre ce boîtier dans votre package.json ou dans votre commande yarn add - selon ce que vous utilisez. Par exemple:

    "@Pickle-Rick/schwifty": "^1.0.0" dans package.json ou yarn add @Pickle-Rick/schwifty .

J'ai trouvé cette solution en explorant les problèmes de github de yarn .


0 commentaires