Nodejs ne trouve pas le module installé sous Windows

240

J'apprends nodejs en ce moment sur Windows. Plusieurs modules sont installés globalement avec npm.cmd et nodejs n'a pas pu trouver les modules installés. Prenez le jade par exemple,

npm install jade -g

Jade est installé dans le répertoire "C:\Program Files (x86)\nodejs\node_modules", mais le code suivant échouera avec une "Cannot find module 'jade'"erreur,

var jade = require('jade');

Cependant, le code fonctionnera correctement lorsque jade est installé localement (sans l'option -g dans npm). Je ne veux pas utiliser de modules installés localement, c'est un gaspillage d'espace disque pour moi. Comment faire fonctionner les modules installés globalement sous Windows?

Cosmore
la source
3
@AmolMKulkarni: je ne sais pas en quoi c'est pertinent ici. L'ajout de «.js» à la condition requise ne résout pas le problème sous Windows.
Dan Dascalescu
1
@DanDascalescu: Je pense que vous avez mal compris la réponse. Le code donné dans cette réponse est un code de Node.js, qui montre à quoi il ressemble pour le package dont vous avez besoin. Donc, si vous comprenez où et comment il recherche les fichiers, vous pouvez alors résoudre votre problème plus facilement.
Amol M Kulkarni
Selon stackoverflow.com/questions/5817874/… npm install forever
Sharif Yazdian

Réponses:

349

Ajoutez une variable d'environnement appelée NODE_PATHet définissez-la sur %USERPROFILE%\Application Data\npm\node_modules(Windows XP), %AppData%\npm\node_modules(Windows 7/8/10), ou partout où npm finit par installer les modules sur votre version Windows. Pour en finir une fois pour toutes, ajoutez-la en tant que variable système dans l'onglet Avancé de la boîte de dialogue Propriétés système (exécuter control.exe sysdm.cpl,System,3).

La solution rapide dans Windows 7+ consiste à simplement exécuter:

rem for future
setx NODE_PATH %AppData%\npm\node_modules
rem for current session
set NODE_PATH=%AppData%\npm\node_modules

Il convient de mentionner qu'il NODE_PATHn'est utilisé que lors de l'importation de modules dans les applications Node. Lorsque vous souhaitez utiliser des binaires de modules installés globalement dans votre CLI, vous devez l'ajouter également à votre PATH, mais sans node_modulespartie (par exemple %AppData%\npmdans Windows 7/8/10).


Vieille histoire

Je suis à peu près nouveau sur node.js moi-même, donc je ne peux pas tout à fait raison, mais d'après mon expérience, cela fonctionne de cette façon:

  1. -g n'est pas un moyen d'installer des bibliothèques globales, c'est seulement un moyen de les placer sur le chemin système afin que vous puissiez les appeler à partir de la ligne de commande sans y écrire le chemin complet. Il est utile, par exemple, puis l'application de nœud convertit des fichiers locaux, comme moins - si vous l'installez globalement, vous pouvez l'utiliser dans n'importe quel répertoire.
  2. node.js lui-même n'a pas regardé le répertoire global npm, il utilise un autre algorithme pour trouver les fichiers requis: http://nodejs.org/api/modules.html#modules_file_modules (en gros, il analyse chaque dossier du chemin, en commençant par du dossier actuel pour node_modules et le vérifie).

Voir la question similaire pour plus de détails: Comment installer un module globalement en utilisant npm?

Alexey Ivanov
la source
17
Merci beaucoup, les liens que vous avez fournis sont très utiles, je suis beaucoup plus clair maintenant, bien que l'algorithme de recherche de module semble un peu compliqué. Enfin, j'utilise la variable d'environnement NODE_PATH pour référencer le chemin du module global set NODE_PATH=C:\Documents and Settings\DevUser\Application Data\npm\node_modules, et cela fonctionne comme prévu. Il est étrange que les modules installés globalement soient positionnés dans '% USERPROFILE% \ Application Data \ npm \ node_modules' sous Windows, pendant ce temps, il ne peut pas y avoir de guillemets dans NODE_PATH.
Cosmore
2
Heureux de vous aider. La modification de NODE_PATH n'a-t-elle pas brisé le chemin vers les modules node.js standard, comme FS?
Alexey Ivanov
2
Même je me demandais pourquoi je C:\Program Files\nodejs\node_modules\npm\node_modulesn'ai pas le module que je viens d'installer en utilisant npm install -g expresset il était disponible dansC:\Documents and Settings\swapnil\Application Data\npm\node_modules
Swapnil Mhaske
1
dans Windows 8, le chemin est%USERPROFILE%\AppData\Roaming\npm\node_modules
Yar
9
Si vous souhaitez savoir où se trouve votre répertoire global node_modules, exécutez la commande npm list -g. La première ligne de sortie sera le parent du répertoire global node_modules - en d'autres termes, le répertoire global node_modules est {output}\node_modules. Il npm install --global {xyz}
affiche
34

si vous êtes dans la plate-forme windows7, vous devriez peut-être changer le NODE_PATH comme ceci: %AppData%\npm\node_modules

Jack
la source
7
c'est dans appdata \ roaming sur windows 8 également
JonnyRaa
6
Je suis sur Windows 8.1 avec npm 2.5.1, et j'ai mon NODE_PATH défini comme documenté, mais il ne trouve toujours pas mes packages installés. Pensées?
JaKXz
5
Dans Windows 10, il devrait juste être% AppData% \ npm
gkiely
Dans mon cas (W10) c'était% AppData% \ Roaming \ npm
Hinrich
32

Je sais que je peux réveiller un zombie mais je pense que c'est toujours un problème, si vous avez besoin d'un accès global aux modules de nœuds sur Windows 7, vous devez l'ajouter à votre chemin de variable globale:

C:\Users\{USER}\AppData\Roaming\npm

Important: seulement ça sans la node_modulespièce, ça m'a pris une demi-heure pour voir ça.

Vitaliy Terziev
la source
4
Alternativement, pour les utilisateurs de Windows 8% USERPROFILE% \ AppData \ Roaming \ npm
Benson
4
Merci pour les conseils sur le retrait de la node_modulespièce, je me débattais aussi avec ça!
danguilherme
20

Pour le faire fonctionner sur Windows 10, je l'ai résolu en ajoutant le dossier %USERPROFILE%\AppData\Roaming\npmà mon PATH. Après avoir \node_modulesajouté comme ceci: %USERPROFILE%\AppData\Roaming\npm\node_modules\n'a pas fonctionné pour moi.

Andi-lo
la source
7
Ou, plus simplement, «% AppData% \ npm»
Dan Diplo
C'est bizarre, ça a marché! Je chasse ce problème depuis deux jours, littéralement. C'est la solution la plus obscure que j'ai essayée et la première qui a fonctionné. Merci beaucoup.
Will
oui il suffit d'ajouter à l' pathenvironnement variabele, alors nous pouvons l'exécuter directement dans windows 10
Zhu Xiaohu
1
Cela montrerait comment effectuer cela avec un exemple, au lieu de dire des choses comme "juste ajouter à ..."
Gabe Hiemstra
14

Je vais juste citer un extrait du blog de ce nœud ...

En règle générale, la règle d'or est la suivante:

  • Si vous installez quelque chose que vous souhaitez utiliser dans votre programme, en utilisant require ('que ce soit'), puis installez-le localement, à la racine de votre projet.
  • Si vous installez quelque chose que vous souhaitez utiliser dans votre shell, sur la ligne de commande ou quelque chose, installez-le globalement, de sorte que ses binaires se retrouvent dans votre variable d'environnement PATH.

...

Bien sûr, il y a des cas où vous voulez faire les deux. Coffee-script et Express sont tous deux de bons exemples d'applications qui ont une interface en ligne de commande, ainsi qu'une bibliothèque. Dans ces cas, vous pouvez effectuer l'une des opérations suivantes:

  1. Installez-le aux deux endroits. Sérieusement, vous manquez d'espace disque? C'est très bien, vraiment. Ce sont de minuscules programmes JavaScript.
  2. Installez-le globalement, puis npm link coffee-script ou npm link express (si vous êtes sur une plate-forme qui prend en charge les liens symboliques.) Ensuite, il vous suffit de mettre à jour la copie globale pour mettre à jour tous les liens symboliques également.
marko
la source
10
They’re tiny JavaScript programs.Certaines de ces bibliothèques ne sont certainement pas minuscules!
UpTheCreek
1
@UpTheCreek Je suis convaincu qu'il faisait référence à la taille dans la portée de l'espace disque. Ce sont des fichiers texte. Ils sont objectivement petits.
Phillip Copley
12

Pour faire court, utilisez npm link jadedans votre répertoire d'application.

Sơn Trần-Nguyễn
la source
4
Il semble que npm link jadecela ne puisse pas fonctionner sous Windows, npm renvoie un message d'erreur comme suit:npm ERR! Error: npm link not supported on windows
Cosmore
1
Il le fait maintenant, comme pour la version v0.8.9
Gianfranco P.
@beyonddoor: Vous devez exécuter à npm linkpartir d'une fenêtre de commande administrateur.
Mrchief
12

J'ai essayé d'ajouter / modifier des variables d'environnement et de conclure que:

  1. Modifier / ajouter User variables(de la case supérieure) au lieu de System variables(de la partie inférieure); sinon, vous devez "exécuter en tant qu'administrateur" pour le faire fonctionner.
  2. Ajouter ;%AppData%\npmà Pathafin de l'utiliser comme un outil de ligne de commande (si pris en charge, comme jshintetgrunt-cli ).
  3. Créez-le NODE_PATHet définissez-le %AppData%\npm\node_modulesdans des require('<pkg_name>')scripts sans l'installer dans le répertoire du projet. (Mais npm linkest suggéré pour cette exigence si vous travaillez sur un système d'exploitation mklinktel que Vista et plus récent.)

Environnement de test:

  • Win 7 (Ent., 64 bits, SP1), Node.js 4.2.4, npm 2.14.12
  • Win 8.1 (Ent., 64 bits), Node.js 0.10.30, npm 1.4.21
Kong Kao
la source
9

J'ai eu du mal à faire fonctionner les modules mondiaux. Finalement, j'ai explicitement ajoutéC:\Users\yourusername\AppData\Roaming\npm à la variable PATH sous Variables système. J'avais également besoin de faire venir cette variable avant la variable de chemin nodejs dans la liste.

J'utilise Windows 10.

John Galt
la source
c'est la seule chose qui a fonctionné pour moi. sous Windows 8
charlie carver
1
C'est aussi la seule chose qui a fonctionné pour moi, merci!
devqon
6

J'ai rencontré ce problème sous Windows 7, en cours d'exécution

npm install -g gulp

en tant qu'administrateur tout en étant connecté en tant qu'utilisateur normal.

Solution: lors de l'exécution de la même installation en tant qu'utilisateur normal (et non «exécuter en tant qu'administrateur» pour cmd), tout allait bien. Je suppose que cela est lié au chemin d'installation et de recherche par défaut.

SCBuergel.eth
la source
1
Pour clarifier un peu plus ce point ... Lorsque Node est installé en tant qu'administrateur, il met à jour le chemin d'accès système pour inclure une référence au dossier du module de nœud global des administrateurs. Lorsqu'un nouvel utilisateur installe quelque chose globalement, il s'installe dans un dossier de module de nœud différent. Chaque utilisateur autre que l'utilisateur qui a installé Node devra mettre à jour son chemin pour inclure son dossier de module de nœud global. Si vous installez et utilisez node sur le même compte, cela ne sera pas nécessaire.
dpsthree
Windows 8.1 pro avec nodejs v6.9.4, pour définir le chemin d'accès: C: \ Program Files \ nodejs \ nodevars.bat
Robot70
4

D'après mon expérience avec win8.1, npm installe des modules C:\Users\[UserName]\AppData\Roaming\npm\node_modules mais les recherche bêtement C:\Users\[UserName]\node_modules.

Un module de référence de solution simple en application par chemin complet:

var jsonminify = require("C:/Users/Saulius/AppData/Roaming/npm/node_modules/jsonminify");
Saulius
la source
4

Pour Windows, tout le monde a dit que vous devriez définir des variables d'environnement pour les modules nodejs et npm, mais savez-vous pourquoi? Pour certains modules, ils ont un outil de ligne de commande, après avoir installé le module, il y a le fichier [module] .cmd dans C: \ Program Files \ nodejs , et il est utilisé pour le lancement dans la commande de fenêtre. Donc, si vous n'ajoutez pas le chemin contenant le fichier cmd aux variables d'environnement % PATH% , vous ne les lancerez pas correctement via la fenêtre de commande.

Kiki.J.Hu
la source
2

J'ai eu le même problème, en essayant d'installer bower avec npm install -g bower

Je pense que c'est parce que le nœud a été installé par un autre utilisateur , pas moi.

J'ai désinstallé le nœud, puis je l'ai réinstallé. Lors de l'installation, j'ai vu ce texte pour l'option Ajouter au CHEMIN> modules npm :

Message dans l'installation du nœud

entrez la description de l'image ici

Après l'installation du nœud, j'ai exécuté à npm install -g bowernouveau. Et maintenant, Bower fonctionne.

Bien sûr, il n'est pas nécessaire de réinstaller le nœud avec son propre utilisateur, comme moi. La solution doit être via les variables NODE_PATH ou PATH , comme d'autres utilisateurs l'ont expliqué.

C'est seulement pour remarquer que ce problème ne se produit que si le nœud a été installé par un autre utilisateur (ou si lors de l'installation l'option Ajouter au CHEMIN> modules npm n'a pas été marquée).

Gregorio
la source
2

Pour moi, j'ai travaillé sur Windows 10 npm config set prefix %AppData%\npm\node_modules

Bojan Mitic
la source
1

Vous pouvez également ajouter au préfixe~/.npmrc droit . Je l'ai pour 64 Win7.C:\Program Files\nodejs

dmi3y
la source
1

Je suis tombé sur cette question car je veux utiliser node.js avec visual studio 2015 sur mon nouvel ordinateur avec windows 10. J'ai utilisé node.js sur windows 7 et 8 et 8.1 Jamais un problème node.js n'a trouvé de module. J'utilise un node.js 0.10.39 hérité car je dois utiliser cette version à cause du module série et RFXCOM.

La réponse pour Windows 10 est de définir le NODE_PATH dans les variables d'environnement avec C: \ Users \ User \ node_modules.

wetlip
la source
1
Euh non. (Windows 10 ici ..) Je vois des modules sur C:\Users\User\node_modules Je vois des modules sur C:\Users\User\AppData\Roaming\npm\node_modules Je vois des modules sur C:\Users\User\node_modules Aussi situé sur C:\Program Files (x86)\nodejs\node_modules\npm\node_modules Je ne sais pas comment cela se produit. Qui est lequel, et pourquoi l'ont-ils fait de cette façon?
zipzit
1

Pour Windows 10, j'ai dû installer localement gulp dans le dossier:

C: \ Users \ myaccount \ AppData \ Roaming \ npm \ node_modules

npm install gulp

Cela a résolu mon problème de "gulp n'est pas reconnu"

Sites Web Bizz
la source
0

Téléchargez et réinstallez simplement le nœud à partir de cela et cela résoudra tous les problèmes de chemin.

N'oubliez pas de redémarrer votre invite de commande ou votre terminal.

Mahendra
la source
0

Toutes les réponses ci-dessus n'ont pas fonctionné pour moi. La seule chose qui a finalement fonctionné a été d'ajouter le% AppData% \ npm à la variable Path de l'environnement ET de supprimer les deux fichiers ng dans C: \ Program Files \ nodejs.

Les packages ng n'étaient pas installés dans C: \ Program Files \ nodejs \ node_modules, il était donc évident que l'utilisation du binaire ng du répertoire nodejs ne fonctionnerait pas.

Je ne sais pas pourquoi il a cherché dans ce répertoire, car j'ai déjà configuré - variable d'environnement PATH - .npmrc dans C: \ Users \ MyUser - J'ai essayé d'ajouter des variables système et / ou NODE_PATH

devqon
la source
-4

si vous utilisez Windows, cela prend quelques étapes, 1) créez un fichier appelé package.json

 {
  "name": "hello"
, "version": "0.0.1"
, "dependencies": {
    "express": "*"
  }
}

où bonjour est le nom du package et * signifie la dernière version de votre dépendance

2) codez votre répertoire de projet et exécutez la commande suivante

installation de npm

Il installe les dépendances

Subbu
la source
4
Cela ne l'installe pas globalement (ce que la question pose). Cela tire la dépendance dans l'application
bryanmac
J'ai essayé tout ce qui précède pour essayer de persuader mon installation node.js de reconnaître les modules installés à l'échelle mondiale, et AUCUN de cela ne fonctionne. Même après avoir désinstallé et réinstallé le nœud (v8.11.3 LTS), chaque fois que j'essaie d'exécuter la commande require ("mongodb") dans un script node.js, j'obtiens la MÊME erreur: "Impossible de trouver le module mongodb". Pourtant, si je lance la commande "npm ll -g mongodb", NPM me dit que le module est installé. Quelqu'un peut-il S'IL VOUS PLAÎT me donner une infirmation qui FONCTIONNE avec ce problème?
David Edwards
MISE À JOUR: Saulius ci-dessus a fourni une solution de contournement qui fonctionne réellement, à savoir la spécification du chemin d'accès complet au module dans l'instruction JavaScript require. Mais si son observation déclarée à propos de la recherche de node.js dans les mauvais dossiers pour les modules installés est correcte, quelqu'un peut-il en avertir les développeurs de node.js? Parce que le problème affecte TOUJOURS la v8.11.3 LTS.
David Edwards