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.
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.
Sur la version 4.4.1, si vous pouvez modifier le nom du package, utilisez:
npm config set @myco:registry http://reg.example.com
Où @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
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/'
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
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
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é.
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.
Quelques étapes que vous pouvez essayer. (c'est comme nous le faisons sur mon lieu de travail)
J'espère que ça t'as aidé.
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>
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.