pouvez-vous héberger un référentiel privé pour votre organisation à utiliser avec npm?

219

Npm ressemble à une excellente plate-forme à utiliser au sein d'une organisation, curieux de savoir si un dépôt privé est possible, comme avec Nexus / Maven. Rien ne vient sur Google :(

Adam
la source
1
Vous trouverez ci-dessous une documentation assez soignée, comment faire: clock.co.uk/tech-blogs/how-to-create-a-private-npmjs-repository C'est la même chose que pvorb a expliqué dans sa réponse.
ramesh.mimit
2
Notez que le poste clock.co.uk est un double complet du registre npm. Pour un cache local de vos dépendances requises, la meilleure solution que j'ai trouvée est npm_lazy . Le document sur ma fourchette peut être légèrement plus facile à suivre.
Jake Berger
1
Je sais que je suis un peu en retard dans la discussion, mais je voudrais juste ajouter que nous avons récemment ajouté la prise en charge du registre npm privé à notre produit (gratuit) ProGet
Karl Harnagy
2
Comme indiqué ci-dessous, Nexus prend désormais en charge les référentiels npm hébergés et proxy.
Zac Thompson
8
Au fil des ans, de nombreuses options sont devenues disponibles. Quiconque y revient devrait lire toutes les réponses et pas seulement celle que j'ai acceptée en 2011.
Adam

Réponses:

100

Je ne pense pas qu'il existe un moyen facile de le faire.

Un regard sur la documentation de npm nous dit qu'il est possible:

Puis-je exécuter mon propre registre privé?

Oui!

Le moyen le plus simple consiste à répliquer la base de données de canapé et à utiliser le même (ou similaire) document de conception pour implémenter les API.

Si vous configurez une réplication continue à partir de la CouchDB officielle, puis définissez votre CouchDB interne comme configuration de registre, vous pourrez lire tous les packages publiés, en plus de vos packages privés, et par défaut, publier uniquement en interne. Si vous souhaitez ensuite publier un package pour le monde entier à voir, vous pouvez simplement remplacer la --registryconfiguration de cette commande.

Il y a aussi un excellent tutoriel sur la façon de créer un référentiel npm privé dans le blog d'horloge.

EDIT (2017-02-26):

Pas vraiment nouveau, mais il existe maintenant des plans payants pour héberger des packages privés sur NPM.

Au fil des ans, NPM est également devenu un facteur pour de nombreuses sociétés non-Node.js, grâce à l'énorme écosystème frontend qui s'appuie sur NPM. Si votre entreprise exécute déjà Sonatype Nexus pour l'hébergement de projets Java en interne, vous pouvez également l'utiliser pour l'hébergement de packages NPM internes.

D'autres options incluent JFrog Artifactory et Inedo ProGet , mais je ne les ai pas utilisées.

pvorb
la source
201

https://github.com/isaacs/npmjs.org/ : Dans la version npm v1.0.26, vous pouvez spécifier les URL des référentiels git privés en tant que dépendance dans vos fichiers package.json. Je ne l'ai pas utilisé mais j'aimerais avoir des commentaires. Voici ce que tu dois faire:

{
    "name": "my-app",
    "dependencies": {
        "private-repo": "git+ssh://[email protected]:my-app.git#v0.0.1",
    }
}

Le post suivant en parle: Debuggable: Private npm modules

ebdr
la source
3
C'est une excellente fonctionnalité, mais j'ai accepté pvorb's parce que je demandais à propos de l'hébergement d'un dépôt NPM entier, à la fois un dépôt Maven interne
Adam
2
Remarque: NPM ne prend actuellement pas en charge la spécification d'une plage de versions avec ces URL git (par exemple 1.2.x ou ^ 1.2.3). github.com/npm/npm/issues/3328
Clay
@Clay, vous pouvez cependant spécifier une balise (v0.0.1), non?
mcha
Oui, vous pouvez faire une balise exacte.
Clay
Existe-t-il un moyen d'utiliser les clés de déploiement GitHub pour s'authentifier auprès de dépôts privés?
sunknudsen
91

Pour cela, il existe un package npm facile à utiliser. https://www.npmjs.org/package/sinopia

En un mot, Sinopia est un serveur de référentiel npm privé / avec mise en cache que vous pouvez installer sans configuration.

Sinopia peut être utilisé pour:

  • publier ses propres packages privés sans les exposer au public
  • mettre en cache uniquement les packages publics utilisés (il n'est pas nécessaire de répliquer l'intégralité du registre public)
  • remplacer les packages publics avec une version modifiée qui ont été produits en interne.
TiQP
la source
13
La sinopie ne semble plus être maintenue. Le dernier commit remonte à plus de 8 mois à ce jour (7 mars 2016). Il a fière allure et fonctionne bien, mais faites attention à la maintenabilité.
Ray Booysen
45
Découvrez verdaccio . C'est une fourchette activement maintenue: github.com/verdaccio/verdaccio
Rotareti
1
verdaccio prend-il en charge une configuration "privée uniquement", dans laquelle il n'interrogera aucun registre public?
MarkusSchaber
1
@MarkusSchaber Vous pouvez désactiver le proxy vers un autre registre. Il fonctionne en mode hors ligne même si le proxy essaie d'accéder au réseau.
Juan Picado
1
Je pense vraiment que Verdaccio mérite sa propre réponse aujourd'hui stackoverflow.com/a/50815174/336753 Je n'ai même pas remarqué le commentaire ici en premier.
kub1x
40

Verdaccio est ce que je cherchais et il mérite sa propre réponse;) Il s'agit d'une fourchette activement maintenue de Sinopia (réponse très appréciée ici ). Il s'agit d'un registre npm en tant que package npm , et peut être trouvé

ici: https://github.com/verdaccio/verdaccio ,
ici: https://www.verdaccio.org ,
ici :,pnpm i -g verdaccio ou
ici:docker run -it --rm --detach --name verdaccio -p 4873:4873 verdaccio/verdaccio

kub1x
la source
2
ce! merci -> docker run -it --rm --detach --name verdaccio -p 4873: 4873 verdaccio / verdaccio
mwm
1
@mwm Merci. Ajout de la version docker à la liste.
kub1x
28

Le 14 avril (2015), des modules privés npm ont été introduits.

Lorsque vous payez pour des modules privés, vous pouvez:

  • Hébergez autant de packages privés que vous le souhaitez
  • Accordez un accès en lecture ou en lecture-écriture pour ces packages à tout autre utilisateur payant
  • Installer et utiliser tous les packages auxquels d'autres utilisateurs payants vous ont donné un accès en lecture
  • Collaborez sur tous les packages auxquels d'autres utilisateurs payants vous ont donné un accès en écriture

Bien sûr, ce n'est pas gratuit - actuellement 7 $ par mois, par utilisateur.

Et c'est toujours un service assez nouveau. Par exemple, la prise en charge des comptes d'organisation est manquante (en juin 2015):

Actuellement, les packages privés ne sont disponibles que pour les utilisateurs individuels, mais la prise en charge des comptes d'organisation sera bientôt disponible. N'hésitez pas à créer un utilisateur pour votre organisation en attendant, et nous pouvons le mettre à niveau vers une organisation lorsque le support est là.

Donc, bien qu'il ne soit pas parfait, c'est la solution officielle de npm pour maintenir les packages privés, et cela en soi mérite d'être mentionné.

METTRE À JOUR

Les packages privés Npm sont maintenant disponibles, avec des plans pour les utilisateurs individuels et les organisations :

  • Nombre illimité de forfaits publics et privés
  • 7 $ / mois / développeur
  • Comprend un nom d'étendue, basé sur le nom de l'organisation
  • Publier et contrôler l'accès à @ org-name / foo

(Avertissement: pas même affilié à distance en aucune façon avec npm, Inc. )

bardzusny
la source
20

Gestionnaires de référentiel avec prise en charge des registres npm privés:

Abel Pastur
la source
4
Seules les versions payantes prennent en charge les référentiels npm; les versions gratuites ne le font pas.
Boon
12
En fait, la version gratuite de Sonatype Nexus 3.0 prend en charge les référentiels npm (avec les référentiels bower et docker).
n8n8baby
10

Je suppose que ce fil a besoin d'une mise à jour. Si vous regardez l'un des registres npm disponibles, ils sont extrêmement lourds et ont besoin de couchdb. Gemfurry et d'autres ont besoin de vous pour sortir des dépôts publics. Certains des npm comme shadow-npm n'ont fait aucun commit récent .

Ensuite, nous avons trouvé Reggie . Il a une bonne activité de validation, extrêmement facile à installer et à utiliser et a un assez bon support communautaire . C'est extrêmement léger et vous n'avez pas à vous soucier de couchdb, etc.

Pradeep Mahdevu
la source
9

Pardonnez-moi si je ne comprends pas bien votre question, mais voici ma réponse:

Vous pouvez créer un module npm privé et utiliser les commandes normales de npm pour l'installer. La plupart des utilisateurs de node.js utilisent git comme référentiel, mais vous pouvez utiliser le référentiel qui vous convient.

  1. Dans votre projet, vous aurez besoin du squelette d'un package NPM. La plupart des modules de nœuds ont des référentiels git où vous pouvez voir comment ils s'intègrent avec NPM (le fichier package.json, je crois, en fait partie et le site Web de NPM vous montre comment créer un package npm)
  2. Utilisez quelque chose de similaire à Make pour créer et tarballer votre package afin qu'il soit disponible sur Internet ou sur votre réseau pour le préparer pour les téléchargements d'installation de npm.
  3. Une fois votre colis fait, utilisez

    npm install * tarball_url *

EhevuTov
la source
5
Vous n'avez pas eu sa question, mais la réponse est très utile pour moi! :)
Eduardo Costa
7

C'est la façon la plus simple que je connaisse - l'héberger dans le cloud avec le registre privé npm Gemfury .

C'est gratuit et vous pouvez vous connecter avec votre compte Github. Cela devrait vous faire gagner beaucoup de temps, par rapport à la création de votre propre base de données.

alex urdea
la source
ce n'est pas gratuit.
I.Tyger
6

nous utilisons le Sonatype Nexus, la version est Nexus Repository ManagerOSS 3.6.1-02. Et je suis sûr qu'il prend en charge le référentiel privé NPM et a mis en cache le package.

entrez la description de l'image ici

Xin Meng
la source
5

Un peu tard pour la fête, mais NodeJS (à partir du ~ 14 novembre je suppose) prend en charge les référentiels NPM d'entreprise - vous pouvez en savoir plus sur leur site officiel .

D'un coup d'œil rapide, il semblerait que npmE permette la mise en miroir directe du référentiel NPM - c'est-à-dire qu'il recherchera les packages dans le vrai référentiel NPM s'il ne peut pas en trouver un sur votre interne. Semble très utile!

npm Enterprise est une solution locale pour partager et distribuer en toute sécurité des modules JavaScript au sein de votre organisation, de la part de l'équipe qui gère npm et le registre public npm. Il est conçu pour les équipes qui ont besoin de:

partage interne facile des modules privés meilleur contrôle du flux de travail de développement et de déploiement sécurité renforcée autour du déploiement des modules open source conformité aux exigences légales pour héberger le code sur site npmE est privé npm

npmE est un registre npm qui fonctionne avec le même client npm standard que vous utilisez déjà, mais fournit les fonctionnalités nécessaires aux grandes organisations qui adoptent maintenant avec enthousiasme le nœud. Il est construit par npm, Inc., le sponsor du projet open source npm et l'hôte du registre public npm.

Malheureusement, ce n'est pas gratuit. Vous pouvez obtenir un essai, mais c'est un logiciel commercial. Ce n'est pas si bon pour les développeurs solo, mais si vous êtes développeur solo, vous avez GitHub :-)

Dan Pantry
la source
3

Cet article explique comment configurer un registre privé

  • assurez-vous que couchdb est installé sur votre système
  • En répliquant npmjs.org, utilisez la commande suivante

    curl -X POST http://127.0.0.1:5984/_replicate -d '{"source":"http://isaacs.iriscouch.com/registry/", "target":"registry", "continuous":true, "create_target":true}' -H "Content-Type: application/json"

Notez qu'il y a "continuous":truedans la commande, cela utilise l'API _changes de CouchDB et tirera toutes les nouvelles modifications lorsque cette API sera notifiée.

Si jamais vous souhaitez arrêter ces réplications, vous pouvez facilement en ajouter "cancel":true. Ensuite, le script serait

    curl -X POST http://127.0.0.1:5984/_replicate -d '{"source":"http://isaacs.iriscouch.com/registry/", "target":"registry", "continuous":true, "create_target":true, "cancel":true}' -H "Content-Type: application/json"

Ensuite , allez à readme npmjs.org installer NPM (assurez - vous nodejset gitest installé). Le coup est toutes les étapes

git clone git://github.com/isaacs/npmjs.org.git
cd npmjs.org
sudo npm install -g couchapp 
npm install couchapp 
npm install semver 
couchapp push registry/app.js http://localhost:5984/registry 
couchapp push www/app.js http://localhost:5984/registry 
nickleefly
la source
1
L'url isaacs.iriscouch.com/registry est malheureusement morte maintenant. J'ai essayé de le changer en skimdb.npmjs.com/registry , ce qui semble fonctionner au début, mais il ne reproduit que l'index du registre et non les tarballs ...
fuzzyTew
Le fichier Lisezmoi de couchapp indique que couchapp est désormais un peu obsolète, mais il indique également que la façon actuelle de mettre en miroir l'ensemble du registre consiste à utiliser npm-fullfat-registry
fuzzyTew
J'ai fini par utiliser un registre statique pour cela, qui contrairement aux solutions couchdb ne nécessite aucune configuration.
fuzzyTew