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

329

J'ai pris du code partagé et l'ai mis dans un module NPM, un que je ne veux pas télécharger dans le registre central. La question est de savoir comment l'installer à partir d'autres projets?

La façon la plus évidente est probablement de créer mon propre registre NPM, mais selon 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
futlib
la source

Réponses:

263
cd somedir
npm install .

ou

npm install path/to/somedir

somedirdoit contenir l' package.jsonintérieur.

Il connaît aussi git:

npm install git://github.com/visionmedia/express.git
mihai
la source
4
La solution path / to / somedir fonctionne, mais c'est plutôt horrible car toutes les instructions require doivent alors inclure ce chemin relatif ou absolu. Veuillez me corriger si je fais quelque chose de mal ...
Luke Bayes
3
@ Luc oui, tu te trompes. Une fois npm installtous les fichiers copiés dans le répertoire de votre projet. Ainsi, les chemins d'accès dans les requireinstructions ne seront relatifs qu'à votre répertoire de projet.
mihai
4
Je suis confus par la partie supérieure et la seule raison pour laquelle je n'ai pas testé cela moi-même est que j'apprends toujours et que je n'ai pas de module privé sur lequel travailler. Quoi qu'il en soit, en changeant votre répertoire à l'emplacement du module, puis en appelant, installcela ne serait-il pas simplement installé là-bas et non pour le projet pour lequel vous souhaitez l'utiliser?
Adam Beck
11
Note latérale: (a) lorsque vous utilisez git repos, vous pouvez spécifier une branche / commit / tag en ajoutant un #<ref>à la fin de l'url git, par exemple git://github.com/visionmedia/express.git#v0.0.1; (b) Pour être sûr, ajoutez "private": trueau package.json de vos dépôts privés. Cela garantira que npm ne vous laissera jamais publier accidentellement votre sauce secrète dans le registre officiel de npm. (selon debuggable.com/posts/… )
Rafael Xavier
9
Pour info si vous servez votre git via http, vous devrez npm i git+http://all/the/things.gitmême si cela git clone http://all/the/things.gitfonctionne très bien
slf
527

Dans vos modules npm privés, ajoutez

"private": true 

à votre package.json

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

{
    "name": "myapp",
    "dependencies": {
        "private-repo": "git+ssh://[email protected]:myaccount/myprivate.git#v1.0.0",
    }
}
250R
la source
59
C'est la vraie bonne réponse si vous voulez que votre package.json maintienne la liste des dépendances du référentiel privé, ce qui est une bonne chose (tm) que vous devriez faire.
6
Dans l'exemple, il fait référence à une balise spécifique, mais si vous n'en avez pas, il sera par défaut maître. (voir git-scm.com/book/en/Git-Basics-Tagging )
250R
4
Je ne comprends pas comment cette ligne de commande peut télécharger du code à partir d'un dépôt github privé si je ne fournis pas mes informations d'identification! Alors, comment puis-je transmettre mes informations d'identification github?
Renato Gama
28
Notez que la "private": truepartie n'est pas nécessaire, mais elle permettra d'éviter que votre dépôt privé ne soit accidentellement publié dans le registre public npm.
evanrmurphy
2
npm recherche également plusieurs variables d'environnement. Dans le manuel de la npm install <git remote url>section, il y a des options comme GIT_ASKPASSet GIT_SSH. Un exemple d'utilisation pour choisir une clé autre que l'id_rsa par défaut:GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://[email protected]:npm/npm.git
Jasmine Hegman
62

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

Oui, vous pouvez! Depuis la documentation https://docs.npmjs.com/cli/install

Un package est:

  • a) un dossier contenant un programme décrit par un fichier package.json
  • b) une archive tar compressée contenant (a)
  • c) une URL qui se résout en (b)
  • d) un <name>@<version>qui est publié dans le registre avec (c)
  • e) a <name>@<tag>qui pointe vers (d)
  • f) un <name>qui a une "dernière" balise satisfaisant (e)
  • g) a <git remote url>qui se résout en (b)

NPM n'est-il pas génial?

Colonel Panic
la source
2
Notez que si vous optez pour l'option b), il doit en fait s'agir d'une archive tar compressée , une simple archive zip ne le fera pas. Autrement dit, si vous créez votre package avec tar -czf my-package.tar.gz dist(en supposant que votre distdossier contient également un package.jsonfichier approprié ), vous pouvez le faire npm install ../my-lib/my-package.tar.gzdepuis votre autre projet.
Dániel Kis-Nagy
48

Mise à jour janvier 2016

En plus d'autres réponses , il y a parfois le scénario où vous souhaitez avoir des modules privés disponibles dans un contexte d'équipe.

Les deux Github et Bitbucket soutiennent le concept de génération d' une équipe clé API . Cette clé API peut être utilisée comme mot de passe pour effectuer des requêtes API au sein de cette équipe.

Dans vos modules npm privés, ajoutez

"private": true 

à votre package.json

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

    {
        "name": "myapp",
        "dependencies": {
            "private-repo":
"git+https://myteamname:[email protected]/myprivate.git",
        }
    }

nom d'équipe = myteamname et API Key = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

Ici, je fais référence à un dépôt Bitbucket, mais il est presque identique en utilisant github aussi.

Enfin, comme alternative, si cela ne vous dérange vraiment pas de payer 7 $ par mois (au moment de la rédaction), vous pouvez maintenant avoir des modules NPM privés prêts à l'emploi.

arcseldon
la source
Pouvez-vous l'utiliser si vous souhaitez avoir un module global?
PI.
Cela ne fonctionne pas pour moi, je le crains. La télécommande et le référentiel sont introuvables. Des idées?
Thomas Bormans
@ThomasBormans - toujours des problèmes? Veuillez coller (brouiller votre nom d'équipe / clé api) ce que vous avez comme ligne dans la section des dépendances de votre package.json - conformément aux instructions ci-dessus. J'ai trouvé que cela fonctionne bien pour les dépôts privés github et bitbucket. Lequel utilisez-vous?
arcseldon
@arcseldon "name": "git + key: [email protected]/user/repo.git " renvoie EISDIR: opération illégale sur un répertoire, lisez . Et "nom": "git + user: [email protected]/repo.git " renvoie plusieurs erreurs, y compris ces mots à distance: Introuvable, fatal: référentiel, Échec de la commande: git clone . Des idées?
Thomas Bormans
Essayez de suivre le format "exact" que j'ai donné en réponse: "git + https: // <myteamname>: <my_key> @ bitbucket.org / <my_repo_name> .git Comment avez-vous généré la clé API? Avez-vous revérifié c'est correct dans vos paramètres bitbucket ... désolé de demander l'évidence, mais j'ai presque 100% de confiance que cela devrait fonctionner
arcseldon
30

FWIW: J'ai eu des problèmes avec toutes ces réponses lorsque je traitais avec un référentiel d'organisation privé.

Ce qui suit a fonctionné pour moi:

npm install -S "git+https://[email protected]/orgname/repositoryname.git"

Par exemple:

npm install -S "git+https://[email protected]/netflix/private-repository.git"

Je ne sais pas vraiment pourquoi les autres réponses n'ont pas fonctionné pour moi dans ce cas, car c'est ce que j'ai essayé en premier avant de frapper 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 aide quelqu'un d'autre.

Ben Lesh
la source
2
Pouvez-vous utiliser un sous-dossier du dépôt git?
Chris
A travaillé pour moi en 2019! Mais je devais m'assurer que git dispose des informations d' identification pour accéder à ce compte. (Par exemple, testez git clone deux fois avec https://, et assurez-vous que le mot de passe n'est pas nécessaire lors de la deuxième exécution. Alors vous êtes
prêt
9

J'ai eu ce 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 une publication légère des modules NPM sur des serveurs privés. Pas parfait (pas d'authentification lors de l'installation), et il est encore très jeune, mais je l'ai testé localement, et il semble faire ce qu'il devrait faire.

C'est ... (et cela juste à partir de leurs documents)

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

puis cd dans le répertoire de votre module et ...

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

enfin, vous pouvez installer les packages de reggie simplement en utilisant cette URL soit dans une commande d'installation directe de npm, soit à partir d'un package.json ... comme ça

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"
}
bwest87
la source
7

Structurez votre code de manière accessible comme ci-dessous. Si cela vous est possible.

  • NodeProjs \ Apps \ MainApp \ package.json

  • NodeProjs \ Modules \ DataModule \ package.json

Dans MainApp @ NodProjs \ Apps \ MainApp \

npm install --S ../../Modules/DataModule

Vous devrez peut-être mettre à jour package.json en tant que:

 "dependencies": {
       "datamodule": "../../Modules/DataModule"
}

Cela a fonctionné pour ma situation.

dynamiclynk
la source
5

Npm fournit maintenant des modules hébergés privés illimités pour 7 $ / utilisateur / mois utilisés comme tel

cd private-project
npm login

dans votre package json set "name": " @username/private-project"

npm publish

puis d'exiger votre projet:

cd ../new-project
npm install --save @username/private-project
roo2
la source
1
Cela nécessite-t-il une étape de connexion côté client?
Aidan Hoolachan
Quelle est une alternative à cela? Par exemple, si vous souhaitez héberger votre "package" sur S3 et tirer à partir de là.
Con Antonakos
4

En commençant par la réponse d' Arcseldon , j'ai trouvé que le nom de l'équipe était nécessaire dans l'URL comme ceci:

npm install --save "git+https://myteamname@[email protected]/myteamname/myprivate.git"

Et notez que la clé API n'est disponible que pour l'équipe, pas pour les utilisateurs individuels.

Kramer
la source
2

Configuration à installer à partir du référentiel Github public, même si la machine est sous pare-feu:

dependencies: {
   "foo": "https://github.com/package/foo/tarball/master"
}
Alex Belozerov
la source
2

J'utilise ce qui suit avec un référentiel github privé:

npm install github:mygithubuser/myproject
Lars
la source
2

C'est ce que je cherchais :

# Get the latest from GitHub, public repo:
$ npm install username/my-new-project --save-dev
# Bitbucket, private repo:
$ npm install git+https://token:[email protected]/username/my-new-project.git#master
$ npm install git+ssh://[email protected]/username/my-new-project.git#master

#  or from Bitbucket, public repo:
$ npm install git+ssh://[email protected]/username/my-new-project.git#master --save-dev
# Bitbucket, private repo:
$ npm install git+https://username:[email protected]/username/my-new-project.git#master
$ npm install git+ssh://[email protected]/username/my-new-project.git#master
# Or, if you published as npm package:
$ npm install my-new-project --save-dev
Isaïe
la source
2

Vous pouvez utiliser Verdaccio à cet effet, qui est un registre de proxy npm privé léger construit dans Node.js. Il est également gratuit et open-source. En utilisant Verdaccio, cela n'implique pas autant de tracas qu'un registre npm privé simple.

Vous pouvez trouver des informations détaillées sur la façon de l'installer et de l'exécuter sur leur site Web, mais voici les étapes:

Cela nécessite node >=8.x.

    // Install it from npm globally
    npm install -g verdaccio

    // Simply run with the default configuration that will host the registry which you can reach at http://localhost:4873/
    verdaccio

    // Set the registry for your project and every package will be downloaded from your private registry
    npm set registry http://localhost:4873/

    // OR use the registry upon individual package install
    npm install --registry http://localhost:4873

Il a également un docker afin que vous puissiez facilement le publier sur votre docker accessible au public et le tour est joué vous avez un dépôt npm privé qui peut être distribué aux autres d'une manière que vous le configurez!

Dominik
la source
0

Très simple -

npm config set registry https://path-to-your-registry/

Il définit en fait registry = "https://path-to-your-registry"cette ligne/Users/<ur-machine-user-name>/.npmrc

Toutes les valeurs que vous avez définies explicitement ou qui ont été définies par défaut peuvent être vues par - npm config list

saveur
la source