390 votes

Comment installer un module NPM privé sans mon propre registre ?

J'ai pris du code partagé et je l'ai placé dans un module NPM, que je ne veux pas télécharger vers le registre central. La question est la suivante : comment puis-je l'installer à partir d'autres projets ?

La solution la plus évidente est probablement de créer mon propre registre NPM, mais d'après la documentation, cela implique beaucoup de tracas.

Puis-je simplement installer un module NPM qui se trouve sur le système de fichiers local, ou peut-être même à partir de git ?

npm install --from-git git@server:project

580voto

250R Points 5600

Dans votre modules npm privés añadir

"private": true 

à votre paquet.json

Ensuite, pour référencer le module privé dans un autre module, utilisez ceci dans votre package.json

{
    "name": "myapp",
    "dependencies": {
        "private-repo": "git+ssh://git@github.com:myaccount/myprivate.git#v1.0.0",
    }
}

65 votes

C'est le réel réponse correcte si vous voulez que votre package.json maintienne la liste des dépendances du dépôt privé, ce qui est une bonne chose (tm) que vous devriez faire.

0 votes

Merci - c'est parfait. Un problème - cela fonctionne si je n'inclus pas la version # à la fin, mais si je le fais, j'obtiens une erreur comme celle-ci : "Erreur : Command failed : fatal : ambiguous argument 'v0.0.1' : unknown revision or path not in the working tree." Je ne trouve pas de solution à ce problème. Savez-vous ce qui se passe ?

7 votes

Dans l'exemple, il s'agit d'une balise spécifique, mais si vous n'en avez pas, la balise master sera utilisée par défaut. (voir git-scm.com/book/en/Git-Basics-Tagging (en anglais) )

299voto

mihai Points 7035
cd somedir
npm install .

o

npm install path/to/somedir

somedir doit contenir le package.json à l'intérieur.

Il connaît aussi git :

npm install git://github.com/visionmedia/express.git

4 votes

La solution du chemin/vers/somedir fonctionne en quelque sorte, mais c'est ensuite assez horrible car toutes les déclarations require doivent alors inclure ce chemin relatif ou absolu. Veuillez me corriger si je fais quelque chose de mal...

4 votes

@Luke oui, vous avez tort. Après npm install tous les fichiers sont copiés dans le répertoire de votre projet. Ainsi, les chemins dans le fichier require seront relatives uniquement au répertoire de votre projet.

4 votes

La partie supérieure me laisse perplexe et la seule raison pour laquelle je ne l'ai pas testée moi-même est que je suis encore en train d'apprendre et que je n'ai pas de module privé sur lequel travailler. Quoi qu'il en soit, en changeant votre répertoire à l'endroit où se trouve le module, puis en appelant install ne serait-il pas simplement installé là et non pour le projet pour lequel vous voulez l'utiliser ?

68voto

Colonel Panic Points 18390

Puis-je simplement installer un paquet NPM qui se trouve sur le système de fichiers local, ou peut-être même à partir de git ?

Si vous le pouvez ! Dans la documentation https://docs.npmjs.com/cli/install

Un paquet est :

  • a) un dossier contenant un programme décrit par un fichier package.json
  • b) un fichier tarball gzippé contenant (a)
  • c) une url qui se résout en (b)
  • d) un <name>@<version> qui est publié sur le registre avec (c)
  • e) un <name>@<tag> qui indique (d)
  • f) un <name> qui a une étiquette "latest" satisfaisant (e)
  • g) un <git remote url> qui se résout en (b)

N'est-ce pas brillant, npm ?

2 votes

Notez que si vous optez pour l'option b), il doit s'agir en fait d'une tarball gzippé une simple archive zip ne suffira pas. C'est-à-dire que si vous créez votre paquet avec tar -czf my-package.tar.gz dist (en supposant que votre dist possède également un dossier package.json dans celui-ci), alors vous pouvez npm install ../my-lib/my-package.tar.gz de votre autre projet.

31voto

Ben Lesh Points 39290

Pour information : j'ai eu des problèmes avec toutes ces réponses lorsque je traitais avec le dépôt d'une organisation privée.

Ce qui suit a fonctionné pour moi :

npm install -S "git+https://username@github.com/orgname/repositoryname.git"

Par exemple :

npm install -S "git+https://blesh@github.com/netflix/private-repository.git"

Je ne sais pas vraiment pourquoi les autres réponses n'ont pas fonctionné dans ce cas précis, car c'est ce que j'ai essayé. premièrement avant d'aller sur Google et de trouver cette réponse. Et les autres réponses sont ce que j'ai fait dans le passé.

J'espère que cela aidera quelqu'un d'autre.

2 votes

Pouvez-vous utiliser un sous-dossier du dépôt git ?

0 votes

Ça a marché pour moi en 2019 ! Mais je devais m'assurer git a des informations d'identification pour accéder à ce compte. (Par exemple, tester deux fois git clone avec https:// et assurez-vous que le mot de passe n'est pas nécessaire lors de la deuxième exécution. Ensuite, vous êtes prêt à partir).

9voto

bwest87 Points 37

J'ai eu le même problème, et après quelques recherches, j'ai trouvé Reggie ( https://github.com/mbrevoort/node-reggie ). Il semble assez solide. Il permet la publication légère de modules NPM sur des serveurs privés. Il n'est pas parfait (pas d'authentification à l'installation), et il est encore très jeune, mais je l'ai testé localement, et il semble faire ce qu'il dit qu'il devrait faire.

C'est-à-dire... (et ceci juste à partir de leurs docs)

npm install -g reggie
reggie-server -d ~/.reggie

ensuite cd dans votre répertoire de modules et...

reggie -u http://<host:port> publish 
reggie -u http://127.0.0.1:8080 publish 

enfin, vous pouvez installer des paquets à partir de reggie en utilisant cette url soit dans une commande npm install directe, soit dans un package.json... comme ceci

npm install http://<host:port>/package/<name>/<version>
npm install http://<host:port>/package/foo/1.0.0

ou

dependencies: {
    "foo": "http://<host:port>/package/foo/1.0.0"
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X