web-dev-qa-db-fra.com

Comment définir un emplacement personnalisé pour l'installation locale du paquet npm?

Est-il possible de spécifier une destination de package personnalisée pour npm install, via un indicateur de commande ou une variable d'environnement?

Par défaut, les installations locales de npm se terminent dans node_modules dans le répertoire actuel, mais je souhaite l’installer dans node_modules dans un autre répertoire, par exemple vendor/node_modules. Comment puis-je y arriver?

154
pje

TL; DR

Vous pouvez le faire en utilisant les indicateurs --prefix et --global *.

pje@friendbear:~/foo $ npm install bower -g --prefix ./vendor/node_modules
[email protected] /Users/pje/foo/vendor/node_modules/bower

* Même s'il s'agit d'une installation "globale", les répertoires installés ne seront pas accessibles via la ligne de commande, sauf si ~/foo/vendor/node_modules existe dans PATH.

TL; R

Chaque attribut configurable de npm peut être défini dans six emplacements différents. Par ordre de priorité:

  • Indicateurs de ligne de commande: --prefix ./vendor/node_modules
  • Variables d'environnement: NPM_CONFIG_PREFIX=./vendor/node_modules
  • Fichier de configuration utilisateur: $HOME/.npmrc ou userconfig param
  • Fichier de configuration globale: $PREFIX/etc/npmrc ou userconfig param
  • Fichier de configuration intégré: path/to/npm/itself/npmrc
  • Configuration par défaut: node_modules/npmconf/config-defs.js

Par défaut, les packages installés localement sont placés dans ./node_modules. les variables globales vont dans la variable prefix config (/usr/local par défaut).

Vous pouvez exécuter npm config list pour afficher votre configuration actuelle et npm config edit pour le modifier.

PS

En général, la documentation de npm est vraiment utile. La section dossiers est un bon aperçu structurel de npm et la section config répond à cette question.

165
pje

Si vous le souhaitez dans config, vous pouvez définir npm config comme suit:

npm config set prefix "$(pwd)/vendor/node_modules"

ou

npm config set prefix "$HOME/vendor/node_modules"

Vérifiez votre configuration avec

npm config ls -l

Ou comme @pje le dit et utilise le drapeau --prefix

24
Rimian

Pour OSX, vous pouvez accéder à $HOME de votre utilisateur (probablement/Utilisateurs/votre nom /) et, s'il n'existe pas déjà, créer un fichier .npmrc (fichier que npm utilise pour la configuration de l'utilisateur). et créez un répertoire dans lequel installer vos paquets npm (par exemple,/Users/votrenom/npm). Dans ce fichier .npmrc, définissez "prefix" sur votre nouveau répertoire npm, qui sera l'emplacement d'installation des packages npm "globalement"; ces packages "globaux" ne seront évidemment disponibles que pour votre compte utilisateur.

En .npmrc:

prefix=${HOME}/npm

Puis exécutez cette commande à partir de la ligne de commande:

npm config ls -l

Cela devrait donner une sortie à la fois sur votre propre configuration locale et sur la configuration globale de npm, et vous devriez voir la configuration de votre préfixe local reflétée, probablement en haut de la longue liste de sorties.

Pour des raisons de sécurité, je recommande cette approche pour configurer le comportement npm de votre compte utilisateur au-dessus du chown-ing de vos dossiers /usr/local, ce que j'ai vu recommandé ailleurs.

10
Ryan

Sous Windows 7, par exemple, vous pouvez utiliser l'ensemble de commandes/opérations suivant.

Créez une variable d’environnement personnel, les doubles barres obliques inverses sont obligatoires:

  • Nom de la variable: %NPM_HOME%
  • Valeur de la variable: C:\\SomeFolder\\SubFolder\\

Maintenant, définissez les valeurs de configuration sur les nouveaux dossiers (noms de fichiers exemple):

  • Définir le dossier npm

npm config set prefix "%NPM_HOME%\\npm"

  • Définir le dossier npm-cache

npm config set cache "%NPM_HOME%\\npm-cache"

  • Définir le dossier temporaire npm

npm config set tmp "%NPM_HOME%\\temp"

Eventuellement, vous pouvez purger le contenu des dossiers originaux avant la configuration est modifiée.

  • Supprimer le npm-cache npm cache clear

  • Lister les modules npm npm -g ls

  • Supprimer les modules npm npm -g rm name_of_package1 name_of_package2

9
MichaelHuelsen

Après avoir recherché moi-même plusieurs projets avec des dépendances partagées comme DRYer, j'ai trouvé:

  • L'installation locale est le moyen Node de tout ce que vous voulez utiliser via require()
  • L’installation globale s’applique aux fichiers binaires de votre chemin, mais elle n’est destinée à rien via require()
  • L'utilisation d'un préfixe signifie que vous devez ajouter les chemins appropriés bin et man vers $PATH
  • npm link ( info ) vous permet d'utiliser une installation locale comme source de globals

→ respectez le chemin Node et installez-le localement

ref:

5
Oli Studholme