web-dev-qa-db-fra.com

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

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

Le moyen le plus évident est probablement de configurer mon propre registre NPM, mais selon la documentation, cela implique beaucoup de tracas.

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

npm install --from-git git@server:project
291
futlib
cd somedir
npm install .

ou 

npm install path/to/somedir

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

Il sait aussi à propos de git:

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

Dans vos modules npm privés add 

"private": true 

à votre package.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://[email protected]:myaccount/myprivate.git#v1.0.0",
    }
}
482
250R

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?

Oui, vous pouvez! Depuis les documents 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 contenant un (a) 
  • c) une URL qui résout en (b) 
  • d) un <name>@<version> publié dans le registre avec (c) 
  • e) un <name>@<tag> qui pointe vers (d) 
  • f) un <name> qui a une "dernière" balise satisfaisant (e) 
  • g) un <git remote url> qui résout en (b) 

NPM n'est-il pas brillant?

59
Colonel Panic

Mise à jour janvier 2016

_ {En plus d'autres réponses}, il arrive parfois que vous souhaitiez disposer de modules privés disponibles dans un contexte d'équipe. 

Github et Bitbucket prennent en charge le concept de génération d’une équipe clé API. Cette clé API peut être utilisée en tant que password pour effectuer des demandes d'API en tant que cette équipe.

Dans vos modules private npm add 

"private": true 

à votre package.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+https://myteamname:[email protected]/myprivate.git",
        }
    }

nom de l'équipe = monnoméquipe et clé API = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

Ici, je fais référence à un repo bitbucket, mais il est presque identique en utilisant github aussi.

Enfin, au lieu de cela, si cela ne vous dérange pas vraiment de payer 7 $ par mois (au moment de la rédaction de cet article), vous pouvez désormais disposer de modules NPM privés prêts à l'emploi.

42
arcseldon

FWIW: Toutes ces réponses me posaient problème lorsque je traitais avec un référentiel d’organisation privée.

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 suis pas tout à fait sûr pourquoi les autres réponses n'ont pas fonctionné pour moi dans ce cas-là, car c'est ce que j'ai essayé d'abord avant d'avoir frappé Google et trouvé cette réponse. Et les autres réponses sont ce que j'ai fait par le passé.

Espérons que cela aide quelqu'un d'autre.

27
Ben Lesh

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 une publication légère des modules NPM sur des serveurs privés. Pas parfait (pas d'authentification lors de l'installation), et c'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 ... (et cela vient de leur documentation)

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

puis cd dans votre répertoire de module 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 simplement en utilisant cette URL soit dans une commande d'installation directe de npm, soit depuis un package.json ... comme si

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

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

  • 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.

6
C0r3yh

En commençant par la réponse de arcseldon , j'ai découvert 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.

3
Kramer

Npm fournit maintenant un nombre illimité modules hébergés privés pour 7 $/utilisateur/mois utilisé de la sorte

cd private-project
npm login

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

npm publish

alors d'exiger votre projet:

cd ../new-project
npm install --save @username/private-project
2
roo2

Vous pouvez utiliser Verdaccio à cette fin, qui est un registre de proxy privé léger npm construit dans Node.js. En outre, il est gratuit et open-source. En utilisant Verdaccio, cela n’entraîne pas beaucoup de problèmes comme le ferait un simple registre privé npm.

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:

Il 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 possède également un menu fixe, ce qui vous permet de le publier facilement sur votre menu fixe et voilà, vous avez un référentiel privé npm qui peut être distribué aux autres de la manière que vous le configurez!

1
Dominik

C'était 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
1
Isaiah

J'utilise les éléments suivants avec un référentiel privé github:

npm install github:mygithubuser/myproject
1
Lars

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"
}
1
Alex Belozerov

Très simple -

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

En fait, registry = "https://path-to-your-registry" cette ligne est définie sur /Users/<ur-machine-user-name>/.npmrc

Toute la valeur que vous avez explicitement définie ou définie par défaut est visible sous - npm config list

0
sapy