web-dev-qa-db-fra.com

Comment définir _auth pour un registre de portée dans .npmrc?

Je me demande comment configurer le .npmrc fichier afin que je puisse avoir un registre par défaut et un autre registre de portée avec authentification.

J'utilise Nexus pour le référentiel privé et je ne sais pas comment définir l'authentification pour le registre de portée, uniquement le registre par défaut.

Par exemple, mon ~/.npmrc le fichier est:

registry=https://registry.npmjs.org/
@test-scope:registry=http://nexus:8081/nexus/content/repositories/npm-test/
[email protected]
_auth="…"

Si je fais npm publish pour un package dont la portée est test-scope, J'obtiens une erreur d'authentification.

AFAIK, le _auth ne s'applique qu'aux registry=... section. Existe-t-il un moyen de spécifier une clé d'authentification pour le @test-scope:registry=... section?

Merci,

17
Willem van Ketwich

Donc, après avoir fouillé le code source du NPM, il s'avère qu'il existe un moyen de le faire.

Ma solution est ci-dessous:

registry=https://registry.npmjs.org/
@test-scope:registry=http://nexus:8081/nexus/content/repositories/npm-test/
//nexus:8081/nexus/content/repositories/npm-test/:username=admin
//nexus:8081/nexus/content/repositories/npm-test/:_password=YWRtaW4xMjM=
email=…

Explication:

La portée @test-scope Spécifie que les packages avec la portée doivent être publiés dans un registre différent de la valeur par défaut registry= Lors de l'exécution de la commande npm publish.

Les deux lignes commençant par //nexus:8081/... Sont utilisées pour spécifier les informations d'identification du référentiel délimité pour username et _password_password Est le composant de mot de passe codé en base64 de les informations d'identification _auth précédemment utilisées.

En utilisant cette approche, seuls les packages étendus seront publiés et installés à partir du registre privé et tous les autres packages seront installés à partir du registre par défaut.

Modifier:

De plus, le mot de passe peut être spécifié en tant que variable d'environnement afin qu'il ne soit pas stocké en texte brut dans le fichier.

Par exemple:

registry=https://registry.npmjs.org/
@test-scope:registry=http://nexus:8081/nexus/content/repositories/npm-test/
//nexus:8081/nexus/content/repositories/npm-test/:username=admin
//nexus:8081/nexus/content/repositories/npm-test/:_password=${BASE64_PASSWORD}
email=…

De plus, lorsque vous utilisez Nexus, la ligne email= Doit être spécifiée.

18
Willem van Ketwich

pour une raison étrange, le _auth est appelé _authToken lorsqu'il est utilisé avec des packages de portée. Si vous l'utilisez, vous n'avez pas besoin de stocker votre mot de passe en texte brut dans votre .npmrc

registry=https://registry.npmjs.org/
@test-scope:registry=http://nexus:8081/nexus/content/repositories/npm-test/ 
//nexus:8081/nexus/content/repositories/npm-test/:_authToken=...
email=…
8
c0l3