web-dev-qa-db-fra.com

Est-il possible de configurer plusieurs registres dans un même fichier npmrc

Voici mon problème. Nous avons un registre NPM privé qui ne fonctionne que dans les réseaux VPN. Je voudrais avoir un registre de secours https://registry.npmjs.org afin que lorsque je n'ai plus de VPN, cela fonctionne de manière transparente.

P.S. Actuellement, j'utilise npmrc , qui fait un bon travail en basculant entre les fichiers .npmrc comme solution de contournement.

98
Abhijit Mazumder

Vous pouvez avoir plusieurs registres pour paquets analysés dans votre fichier .npmrc. Par exemple:

@polymer:registry=<url register A>
registry=http://localhost:4873/

Les paquets sous @polymer portée seront reçus de https://registry.npmjs.org , mais le reste sera reçu de votre MNP local.

130
José Alberto Ruiz

Sur la version 4.4.1, si vous pouvez modifier le nom du package, utilisez:

npm config set @myco:registry http://reg.example.com

@myco est la portée de votre paquet.

Vous pouvez installer le paquet de cette façon:

npm install @myco/my-package

Pour plus d'informations: https://docs.npmjs.com/misc/scope

48
Gilberto Alexandre

Ce n'est pas la meilleure solution, mais si vous utilisez mac ou linux même dans Windows, vous pouvez définir un alias pour différents registres.

##############NPM ALIASES######################
alias npm-default='npm config set registry https://registry.npmjs.org'
alias npm-sinopia='npm config set registry http://localhost:4873/'
14
owaishanif786

Pour ceux qui recherchent également une solution d’authentification, j’ajouterais à la solution des packages scoped que vous pouvez avoir plusieurs lignes dans votre fichier .npmrc:

//internal-npm.example.com:8080/:_authToken=xxxxxxxxxxxxxxx
//registry.npmjs.org/:_authToken=yyyyyyyyyy

Chaque ligne représente un registre NPM différent

13
Gregra

Comme cela fait quelques années et que cela ne semble pas possible (en utilisant uniquement npm), une solution à ce problème consiste à utiliser le Nexus Repository Manager (de Sonatype). Nexus prend en charge plusieurs référentiels, vous permet de les commander, ainsi que des mandataires/caches pour améliorer la vitesse.

Il existe une version gratuite et une version pro/payante. La fonctionnalité qui prend en charge cette fonctionnalité est décrite à l'adresse suivante: https://help.sonatype.com/repomanager3/node-packaged-modules-and-npm-registries

Les informations pertinentes sont dupliquées ci-dessous, donc si/lorsque l'URL/lien ci-dessus cesse de fonctionner, les informations sont toujours ici.

Un groupe de référentiels est le moyen recommandé d'exposer à vos utilisateurs tous les référentiels de registres npm du gestionnaire de référentiels, sans nécessiter de configuration supplémentaire côté client. Un groupe de référentiels vous permet d'exposer le contenu agrégé de plusieurs référentiels proxy et hébergés avec une URL vers npm et d'autres outils.

Il vous permet de créer des registres privés npm

Un registre privé npm peut être utilisé pour télécharger vos propres packages ainsi que des packages tiers.

Et

Pour réduire le nombre de téléchargements en double et améliorer les vitesses de téléchargement pour vos développeurs et vos serveurs CI, vous devez utiliser un proxy pour le registre hébergé sur https://registry.npmjs.org . Par défaut, npm accède directement à ce registre. Vous pouvez également utiliser un proxy pour tout autre registre dont vous avez besoin.

Voici donc une liste rapide des choses que vous faites pour que cela fonctionne:

  • Installer Nexus

  • Créer un référentiel local/privé (ou pointer vers votre référentiel privé sur un autre serveur)

  • Créez un GROUPE répertoriant votre référentiel privé et le référentiel public.

  • Configurez votre fichier $ HOME/.npmrc pour qu'il pointe vers le "GROUPE" que vous venez de créer.

  • Publiez vos packages npm privés sur le référentiel local.

  • Les utilisateurs peuvent maintenant exécuter une configuration unique.

npm config set registry https://nexus/content/groups/GROUP

  • Les utilisateurs peuvent ensuite installer des packages publics ou privés via npm install. npm install my-private-package npm install lodash any-other-public-package

Et vos paquets publics et privés peuvent être installés via une simple commande npm install. Nexus recherche le package dans chaque référentiel configuré dans le groupe et renvoie les résultats. Donc, npm pense toujours qu’il n’ya qu’un seul registre, mais derrière le rideau, plusieurs référentiels sont utilisés.

REMARQUE IMPORTANTE: lorsque vous publiez vos composants, vous devez spécifier la commande npm publish --registry https://nexus/content/repositories/private-repo my-private-package afin que votre package soit publié dans le référentiel approprié.

7
PatS

Vous pouvez utiliser la syntaxe de plusieurs référentiels pour l'entrée registry de votre fichier .npmrc:

registry=http://serverA.url/repository-uri/
//serverB.url/repository-uri/
//serverC.url/repository-uri/:_authToken=00000000-0000-0000-0000-0000000000000
//registry.npmjs.org/

Cela ferait que votre npm recherche des paquets dans différents serveurs.

5
Fernando Fernandes

Quelques étapes que vous pouvez essayer. (c'est comme nous le faisons sur mon lieu de travail)

  • Créez un groupe de registres avec deux adresses sources (ou plus) du référentiel. L'un serait votre privé interne et l'autre un proxy pour npmjs donnant la priorité au interne.
  • Faites de ce groupe votre base de registre dans le fichier .npmrc. De cette façon, npm essaiera toujours de l’obtenir de l’interne, si non trouvé, l’obtenir du proxy

J'espère que ça t'as aidé.

3
Kaus Untwale

J'utilise les outils cli de Strongloop pour cela; voir https://strongloop.com/strongblog/switch-between-configure-public-and-private-npm-registry/ pour plus d'informations

La commutation entre les référentiels est aussi simple que: slc registry use <name>

1
davidcyp

Je rencontre le même problème lorsque mon entreprise a mis en place son propre registre. Je retravaille donc fortement proxy-registry en proxy-multi-registres pour résoudre ce problème. J'espère que ça vous aidera aussi.

0
xymopen