194 votes

Installer des dépendances globalement et localement à l'aide de package.json

En utilisant npm, nous pouvons installer les modules globalement en utilisant l’option -g . Comment pouvons-nous faire cela dans le fichier package.json?

Supposons que ce soient mes dépendances dans le fichier package.json

 "dependencies": {
    "mongoose": "1.4.0",
    "node.io" : "0.3.3",
    "jquery"  : "1.5.1",
    "jsdom"   : "0.2.0",
    "cron"    : "0.1.2"
  } 

Lorsque je lance npm install , je souhaite que seul node.io soit installé globalement, les autres doivent être installés localement. Y a-t-il une option pour cela?

225voto

Jason Livesay Points 1341

Note: (edit) je pense maintenant que dans de nombreux cas, une approche différente comme quoi joeytwiddle suggère ci-dessous $(npm bin)/executable peut-être un peu plus robuste, car il ne dépend pas de n'importe quelle version installée à l'échelle mondiale.

Mais si vous voulez vraiment installer à l'échelle mondiale, vous pouvez ajouter des scripts section de l'emballage.json:

"scripts": {
  "preinstall": "npm i -g themodule"
}

Donc en fait mon npm install exécute npm install de nouveau .. ce qui est bizarre, mais semble fonctionner.

Remarque: vous pouvez rencontrer des problèmes si vous utilisez la configuration la plus courante pour npm où le Nœud package installe requis sudo. Une option est de changer votre npm configuration si ce n'est pas nécessaire:

npm config set prefix ~/npm, ajouter $HOME/ngp/bin à la variable d'environnement $PATH, et append export PATH=$HOME/npm/bin:$PATH votre .bashrc.

12voto

joeytwiddle Points 3226

Au lieu d'utiliser une installation globale, vous pouvez utiliser la commande " exécuter localement installé l'exécutable, en faisant:

$(npm bin)/<executable_name> <arguments>...

Dans votre cas:

$(npm bin)/node.io --help

Bien que cela rend chaque appel un peu gonflé, il doit juste travailler, évitant:

  • le potentiel de conflits de dépendance (comme l'a fait remarquer @nalply)
  • la nécessité d' sudo
  • la mise en place d'un mnp préfixe (comme suggéré ci-dessus)

J'ai vu que l'approche ici, où l'auteur a fourni un npm-exec alias comme un raccourci. Ce chap également fait quelque chose de similaire, à l'aide d'un shellscript il appelle env.sh.

Les conseils donnés dans les MNP docs est moins utile, car il semble être plus sur la création de packages de l'exécution d'un projet: https://www.npmjs.org/doc/misc/npm-scripts.html

3voto

nibblebot Points 71

Tous les modules de package.json sont installés dans ./node_modules/

Je n'ai pas pu trouver cela explicitement déclaré, mais c'est la référence package.json pour NPM .

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