web-dev-qa-db-fra.com

Spécifiez le chemin d'accès à node_modules dans package.json

Existe-t-il un moyen de déplacer le répertoire node_modules dans une application vers/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 de solution. Votre aide est très appréciée.

73
sturoid

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és par des deux-points, le noeud recherchera les modules s'ils ne sont pas trouvés ailleurs. (Remarque: sous Windows, NODE_PATH est délimité par des points-virgules au lieu de deux-points.)

De plus, le noeud recherchera dans les emplacements suivants:

1: $ HOME/.node_modules

2: $ HOME/.node_libraries

3: $ PREFIX/lib/node

Où $ HOME est le répertoire de base de l'utilisateur et $ PREFIX est le préfixe de nœud configuré du nœud.

Ce sont principalement pour des raisons historiques. Nous vous conseillons vivement de placer vos dépendances localement dans des dossiers node_modules. Elles seront chargées plus rapidement et de manière plus fiable.

Source

41
xShirase

En bref: ce n'est pas possible, et il semble qu'il ne sera jamais supporté (voir ici https://github.com/npm/npm/issues/775 ).

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

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

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

22
Charminbear

Je ne sais pas si c'est ce que vous aviez à l'esprit, mais j'ai fini par répondre à cette question car je ne pouvais pas installer _node_modules_ dans mon répertoire de projet, car il était monté sur un système de fichiers ne prenant pas en charge les liens VM "dossier").

J'ai trouvé la solution suivante:

  1. Copiez le fichier _project.json_ dans un dossier temporaire sur un système de fichiers différent.
  2. Exécuter _npm install_ là
  3. Copiez le répertoire _node_modules_ résultant dans le 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 par répondre à cette question lorsqu'il cherchera un moyen de déplacer _node_modules_ vers un autre système de fichiers.

Autres options

Il existe une autre solution de contournement, qui j'ai trouvé sur le problème github que @Charminbear est lié à , mais cela ne fonctionne pas avec grunt car il ne prend pas en charge _NODE_PATH_ comme - 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 réellement 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_
4
Rich

Le fil prend en charge cette fonctionnalité:

# .yarnrc file in project root
--modules-folder /node_modules

Mais votre expérience peut varier en fonction des packages que vous utilisez. Je ne suis pas sûr que vous vouliez aller dans ce terrier de lapin.

4
Vanuan