J'écris un certain nombre de morceaux de code (à usage interne) en utilisant node.js et je veux stocker les modules (empaquetés pour npm) dans un référentiel de packages pour chaque distribution sur les différentes machines sur lesquelles ils seront installés.
Idéalement, j'aimerais une solution similaire aux référentiels apt de Debian dans laquelle je peux exécuter un serveur de référentiel privé et configurer npm pour utiliser une liste de référentiels à installer à partir de (lors de l'installation de "foo", si "foo" est connu de mon serveur, installez-le à partir de là, sinon installez-le à partir du serveur public).
Cependant, il semble que la clé de configuration npm registry
n'accepte qu'une seule URL.
Existe-t-il un moyen de réaliser ce que je veux?
Les plus proches que j'ai pu trouver ont été:
Je viens de mettre cela en place pour mon travail. Voici ce que j'ai fait:
Configuration du registre NPM vide : J'ai suivi les instructions de ce fork de npmjs.org, qui ajoute beaucoup documentation améliorée .
Configuration de Kappa : J'ai utilisé Kappa , un excellent proxy npm de Paypal. (Je suppose qu'ils ont un cas d'utilisation très similaire à la plupart des gens qui veulent un référentiel privé; c'est exactement ce que je voulais).
Configuration de npm_lazy ( facultatif): Je voulais un joli cache de paquets fréquemment utilisés au cas où npmjs.org tomberait, j'ai donc ajouté npm_lazy devant le tout, comme couche de mise en cache.
Le tout a pris deux jours (ish) pour être opérationnel. En guise de remarque, si vous craignez que des personnes accèdent au registre public par accident, je vous recommande d'ajouter ceci à votre package.json
:
"publishConfig": { "registry": "http://my-registry.example.com" },
Ce n'est vraiment qu'un peu de paranoïa; une fois que vous avez configuré votre npm pour pointer vers votre instance Kappa/npm_lazy, Kappa gère la publication vers votre référentiel privé pour vous.
Remarque: Kappa ne publiera que chaque publication dans le premier référentiel de sa configuration. Si vous devez publier à la fois dans votre registre privé et auprès du public, vous devrez élaborer votre propre solution.
Dans votre package.json, vous pouvez utiliser n'importe quelle URL qui pointe vers un module compressé npm valide. J'utilise un s3 avec un nom de bucket difficile à deviner.
npm pack
s3cmd put *.tgz s3://path-to-your bucket
S3 n'est qu'un exemple, vous pouvez utiliser n'importe quel moyen pouvant placer un fichier sur un serveur Web, il peut même être protégé via une authentification de base.
Je crois que le projet Kappa de Paypal conviendrait à votre besoin.
Voici un article décrivant le projet Kraken de Paypal et comment Kappa s'intègre.
Je comprends que ce n'était pas disponible au moment de la question de Quentin, mais peut-être que cela sera utile pour d'autres qui viennent ici.
npm-registry-client Le numéro 42 de GitHub répertorie plusieurs façons de créer votre propre miroir de référentiel. à savoir:
Dans l'ensemble, il me semble que vous pouvez obtenir les meilleures réponses en recherchant dans les référentiels appartenant à https://github.com/npm ou en posant votre question là-bas
Comme l'a suggéré Dominic Barnes, nous ne pouvons reproduire que _design
documents (schémas de table CouchDB)
Comment reproduire uniquement les documents de conception?
Cependant, il doit vérifier si certaines données sont nécessaires.
Vous pouvez répliquer les modules dont vous avez besoin, puis écrire un serveur proxy qui recherche un module dans votre réplication. Si un module n'existe pas, il pourrait diriger la demande vers NPM et retourner le résultat à partir de là.