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:
project.json
dans un dossier temporaire sur un autre système de fichiers npm install
y 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.
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