Comment installer les dépendances package.json dans le répertoire courant à l'aide de npm

202

J'ai une application web: fooapp . J'ai un package.jsonà la racine. Je veux installer toutes les dépendances dans un spécifique node_modules directory. Comment puis-je faire cela?

Ce que je veux

Disons que j'ai deux widgetdépendances. Je veux me retrouver avec une structure de répertoires comme celle-ci:

node_modules/
  widgetA
  widgetB
fooapp/
  package.js
  lib
  ..

Ce que je reçois

quand je cours npm install fooapp/ je reçois ceci:

node_modules/
  fooapp/
    node_modules/
      widgetA
      widgetB
    package.js
    lib/
    ..
fooapp/
  package.js
  lib/
  ..

npm fait une copie de mon répertoire d'application dans le répertoire node_modules et installe les packages dans un autre répertoire node_modules.

Je comprends que cela a du sens pour l'installation d'un package. Mais je n'ai pas require()mon application web à l'intérieur d'autre chose, je l'exécute directement. Je cherche un moyen simple d'installer mes dépendances dans un répertoire node_modules spécifique.

Daniel Beardsley
la source

Réponses:

389

Fonctionnement:

npm install

depuis l'intérieur de votre répertoire d'application (c'est-à-dire où se trouve package.json) installera les dépendances de votre application, plutôt que de l'installer en tant que module, comme décrit ici . Celles-ci seront placées dans ./node_modules par rapport à votre fichier package.json (c'est en fait un peu plus complexe que cela, alors vérifiez les documents npm ici ).

Vous êtes libre de déplacer le répertoire node_modules vers le répertoire parent de votre application si vous le souhaitez, car le mécanisme 'require' du nœud le comprend. Cependant, si vous souhaitez mettre à jour les dépendances de votre application avec install / update, npm ne verra pas les 'node_modules' déplacés et créera à la place un nouveau répertoire, toujours par rapport à package.json.

Pour éviter cela, créez simplement un lien symbolique vers les modules node_modules déplacés depuis le répertoire de votre application:

ln -s ../node_modules node_modules
ireddick
la source
Fantastique! Je vais l'essayer et marquer cette réponse comme acceptée si cela fonctionne.
Daniel Beardsley
9
Bien qu'il s'agisse d'une solution de travail, j'ai découvert que c'était npm linkplus pratique dans les situations où vous devez récupérer des modules dans un autre répertoire (voir stackoverflow.com/a/14387210/820520 )
melekes
14

Dans mon cas, je dois faire

sudo npm install  

mon projet se trouve dans / var / www, je dois donc également définir les autorisations appropriées.

aesede
la source
15
sudo peut ne pas être requis pour l'installation de npm.
Allen Koo
2
Selon l'utilisateur qui doit exécuter le fichier js et les dépendances installées, vous pouvez exécuter sudo -u [username] npm install. Mieux vaut juste npm installet chownle répertoire node_modules récursivement après coup.
TheLonelyGhost
5
ne lancez jamais npm avec sudo à moins que vous n'utilisiez -g- et même dans ce cas, il existe de meilleures façons de gérer cela.
tkone
1
Merci pour votre réponse, mais pourquoi? peux-tu expliquer? Je veux dire, que se passe-t-il si j'ai un projet dans lequel je veux ou dois conserver un dossier avec les autorisations root et y installer les dépendances sans -g? il y a peut-être une bonne raison, mais j'ai installé sudo npm (sans -g) plusieurs fois et je n'ai jamais eu de problème. À votre santé!
aesede
1
@RredCat Je suis d'accord sur la bonne façon de faire ce genre de choses, mais après un certain temps, j'ai remarqué que cette discussion migre vers Ubuntu, il semble qu'il y ait un problème dans la façon dont il gère certaines autorisations et certains dossiers, ce qui oblige les utilisateurs à utiliser sudo npm. Encore une fois, uniquement dans Ubuntu.
aesede
0

Il suffit d'exécuter

sudo npm i --save

C'est tout

HA
la source