Spécifiez le chemin d’access à node_modules dans package.json

Existe-t-il un moyen de déplacer le répertoire node_modules dans une application, disons / vendor / node_modules, comme le fait bower avec le fichier bowerrc? Je pensais que cela pourrait être spécifié dans package.json mais je n’arrive pas à trouver une solution. Votre aide est tres apprecie.

oui, vous pouvez simplement définir la variable env NODE_PATH:

 export NODE_PATH='yourdir'/node_modules 

Selon le doc:

Si la variable d’environnement NODE_PATH est définie sur une liste de chemins absolus délimitée par des deux-points, le noeud recherchera ces chemins pour les modules s’ils ne se trouvent pas ailleurs. (Remarque: Sous Windows, NODE_PATH est délimité par des points-virgules au lieu de deux points.)

De plus, le nœud effectuera une recherche dans les emplacements suivants:

1: $ HOME / .node_modules

2: $ HOME / .node_libraries

3: $ PREFIX / lib / node

Où $ HOME est le répertoire personnel de l’utilisateur et $ PREFIX est le préfixe_noeud configuré par le noeud.

Ce sont principalement pour des raisons historiques. Nous vous encourageons vivement à placer vos dépendances localement dans les dossiers node_modules. Ils seront chargés plus rapidement et de manière plus fiable.

La source

En bref: ce n’est pas possible, et comme cela semble ne jamais être supporté (voir ici https://github.com/npm/npm/issues/775 ).

Il y a quelques arrêts de travail avec l’utilisation des variables CLI ou ENV (voir la réponse sélectionnée), du fichier .npmrc-Config-Files ou du npm link – ce qu’ils ont tous en commun: ils ne sont jamais spécifiques à un projet, mais toujours une sorte de solutions global .

Pour moi, aucune de ces solutions n’est vraiment propre, car les consortingbuteurs à votre projet doivent toujours créer une configuration spéciale ou avoir des connaissances particulières: ils ne peuvent pas simplement npm install et cela fonctionne.

Donc: Soit vous devrez placer votre package.json dans le même répertoire que celui où vous voulez que vos node_modules soient installés, soit vivre avec le fait qu’ils seront toujours dans le répertoire racine de votre projet.

Je ne suis pas sûr que ce soit ce que vous aviez en tête, mais je me suis retrouvé sur cette question car je ne pouvais pas installer node_modules dans mon node_modules projet car il était monté sur un système de fichiers qui ne supportait pas les liens symboliques dossier).

J’ai trouvé la solution suivante:

  1. Copiez le fichier project.json dans un dossier temporaire sur un autre système de fichiers
  2. Exécutez npm install y
  3. Copiez le répertoire node_modules résultant node_modules répertoire du projet, en utilisant cp -r --dereference pour développer les liens symboliques en copies.

J’espère que cela aidera quelqu’un d’autre qui finira sur cette question en cherchant un moyen de déplacer node_modules vers un autre système de fichiers.

Autres options

Il existe une autre solution de contournement, que j’ai trouvée sur le problème de github auquel @Charminbear était lié , mais cela ne fonctionne pas avec grunt car il ne prend pas en charge NODE_PATH selon https://github.com/browserify/resolve/issues/136 :

Disons que vous avez /media/sf_shared et que vous ne pouvez pas y installer de liens symboliques, ce qui signifie que vous ne pouvez pas installer npm à partir de /media/sf_shared/myproject car certains modules utilisent des liens symboliques.

  • $ mkdir /home/dan/myproject && cd /home/dan/myproject
  • $ ln -s /media/sf_shared/myproject/package.json (vous pouvez créer un lien symbolique dans cette direction, vous ne pouvez pas en créer un dans / media / sf_shared)
  • $ npm install
  • $ cd /media/sf_shared/myproject
  • $ NODE_PATH=/home/dan/myproject/node_modules node index.js