Voici mon problème. Nous avons un registre NPM privé qui ne fonctionne qu'en VPN. J'aimerais avoir un registre de secours https://registry.npmjs.org afin que, lorsque je suis hors de VPN, cela fonctionne de manière transparente.
PS Actuellement, j'utilise npmrc qui fait un bon travail pour basculer entre les fichiers .npmrc comme solution de contournement
Réponses:
Vous pouvez avoir plusieurs registres pour les packages étendus dans votre
.npmrc
fichier. Par exemple:Les packages
@polymer
concernés seront reçus de https://registry.npmjs.org , mais le reste sera reçu de votre NPM local.la source
Sur la version 4.4.1, si vous pouvez changer le nom du package, utilisez:
Où
@myco
est la portée de votre package.Vous pouvez installer le package de cette manière:
Pour plus d'informations: https://docs.npmjs.com/misc/scope
la source
Invalid package name "@npmjs/": name can only contain URL-friendly characters
quand je coursnpm i
Pour tous ceux qui recherchent également une solution d'authentification, j'ajouterais à la solution des packages étendus que vous pouvez avoir plusieurs lignes dans votre
.npmrc
fichier:Chaque ligne représente un registre NPM différent
la source
npm login --registry=npm.example.com
. Il stockera les informations de connexion (authTokens) dans le fichier .npmrc de votre dossier utilisateur, vous n'avez donc pas besoin de les avoir dans le code source ( docs.npmjs.com/cli/adduser )registry.npmjs.org
, cela a fonctionné pour moiCe n'est pas le meilleur moyen, mais si vous utilisez mac ou linux même sous Windows, vous pouvez définir des alias pour différents registres.
la source
alias npm-sin=npm --registry https://localhost:4873/
Comme cela fait quelques années et qu'il ne semble pas possible de le faire (en utilisant npm seul), une solution à ce problème est d'utiliser le Nexus Repository Manager (de Sonatype). Nexus prend en charge plusieurs référentiels, vous permet de les ordonner, ainsi que des proxys / caches pour améliorer la vitesse.
Une version gratuite et une version pro / payante existent. La fonctionnalité qui prend en charge cela est décrite à l' adresse : 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 là.
Il vous permet de créer des registres npm privés
Et
Voici donc une petite liste à puces des choses que vous faites pour que cela fonctionne:
Installez Nexus
Créez un dépôt local / privé (ou pointez vers votre dépôt privé sur un autre serveur)
Créez un GROUPE qui répertorie votre dépôt privé et le dépôt 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 dans le référentiel local.
Les utilisateurs peuvent désormais 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 packages publics et privés peuvent être installés via une simple
npm install
commande. Nexus trouve le package recherchant chaque dépôt configuré dans le groupe et renvoie les résultats. Donc npm pense toujours qu'il n'y a qu'un seul registre, mais derrière le rideau, plusieurs dépôts sont utilisés.REMARQUE IMPORTANTE: lorsque vous publiez vos composants, vous devrez spécifier la
npm publish --registry https://nexus/content/repositories/private-repo my-private-package
commande afin que votre package soit publié dans le référentiel approprié.la source
npm-private
au lieu denpm-group
), vous pouvez remplacer laregistry
clé dans lepackage.json
de votre projet (voirhttps://blog.sonatype.com/using-nexus-3-as-your-repository-part-2-npm-packages
pour plus de détails). En utilisant,npm config set registry <url>
vous pouvez le définir sur, par exemplenpm-group
, qui contientnpm-registry
(référentiel de transfert) etnpm-private
(votre propre référentiel). J'ai utilisé cette solution, car extraire des artefacts de GitLab CE local était trop compliqué.Vous pouvez utiliser la syntaxe de plusieurs référentiels pour l'
registry
entrée dans votre.npmrc
fichier:Cela inciterait votre npm à rechercher des packages dans différents serveurs.
la source
serverA
,serverB
et parserverC
exemple les dépôts sont de notre réseau interne, ne fonctionnera pas pour vous. Je ne sais pas si cela vous convient, mais si vous pensez que c'est le cas, vous pouvez essayer de déployer un Nexus Repository Manager pour les dépôts internes.Quelques étapes que vous pouvez essayer. (c'est comme ça qu'on fait sur mon lieu de travail)
J'espère que cela pourra aider.
la source
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
Passer d'un référentiel à un autre est aussi simple que:
slc registry use <name>
la source
Je rencontre le même problème lorsque mon entreprise met en place son propre registre, donc je retravaille fortement le proxy-registre en proxy-multi-registres pour résoudre ce problème. J'espère que cela vous aidera également.
la source
À partir du 13 avril 2020, cette fonctionnalité n'existe pas à moins que vous ne puissiez utiliser différentes étendues, mais vous pouvez utiliser le script de post - installation comme solution de contournement. Il est toujours exécuté, eh bien , après chaque installation de npm :
Supposons que votre .npmrc soit configuré pour installer @ foo-org / foo-pack-private à partir de votre dépôt github privé, mais que le package public @ foo-org / foo-pack-public est sur npm (sous la même portée: foo- org ).
Votre post - installation pourrait ressembler à ceci:
N'oubliez pas de supprimer @ foo-pack / foo-org du tableau des dépendances pour vous assurer que npm install n'essaye pas de l'obtenir depuis github et d'ajouter le drapeau --dry-run qui s'assure que package.json et package- lock.json reste inchangé après l' installation de npm .
la source
Mon approche a été de créer une légère variante de ligne de commande qui ajoute le commutateur de registre.
J'ai créé ces fichiers dans le dossier nodejs où se trouve l'exécutable npm:
npm-.cmd
:npm-
:Maintenant, si je veux faire une opération sur le registre npm normal (alors que je ne suis pas connecté au VPN), je tape simplement
npm-
là où je taperais habituellementnpm
.Pour tester cette commande et voir le registre pour un package, utilisez cet exemple:
PS. Je suis dans Windows et j'ai testé cela dans Bash, CMD et Powershell. moi aussi
la source