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,
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
Où _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.
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=…