Nodejs non riesce a trovare il modulo installato su Windows


240

Sto imparando nodejs al momento su Windows. Diversi moduli sono installati a livello globale con npm.cmd e nodejs non è riuscito a trovare i moduli installati. Prendi ad esempio la giada,

npm install jade -g

Jade è installato nella directory "C:\Program Files (x86)\nodejs\node_modules", ma il seguente codice fallirà con un "Cannot find module 'jade'"errore,

var jade = require('jade');

Tuttavia, il codice verrà eseguito correttamente quando jade è installato localmente (senza l'opzione -g in npm). Non voglio usare moduli installati localmente, è uno spreco di spazio su disco per me. Come posso far funzionare i moduli installati a livello globale su Windows?



3
@AmolMKulkarni: non sono sicuro di quanto sia rilevante qui. L'aggiunta di ".js" al requisito non risolve il problema su Windows.
Dan Dascalescu,

1
@DanDascalescu: penso che tu abbia frainteso la risposta. Il codice fornito in quella risposta è un codice di Node.js, che mostra come cerca il pacchetto richiesto. Quindi, se capisci dove e come cercare i file, puoi risolvere il problema più facilmente.
Amol M Kulkarni,


Risposte:


349

Aggiungi una variabile d'ambiente chiamata NODE_PATHe impostala su %USERPROFILE%\Application Data\npm\node_modules(Windows XP), %AppData%\npm\node_modules(Windows 7/8/10) o ovunque npm finisca per installare i moduli sul tuo sapore di Windows. Per farlo una volta per tutte, aggiungilo come variabile di sistema nella scheda Avanzate della finestra di dialogo Proprietà del sistema (esegui control.exe sysdm.cpl,System,3).

La soluzione rapida in Windows 7+ è semplicemente eseguire:

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

Vale la pena ricordare che NODE_PATHviene utilizzato solo durante l'importazione di moduli nelle app Node. Quando si desidera utilizzare i file binari dei moduli installati a livello globale nella propria CLI, è necessario aggiungerlo anche al proprio PATH, ma senza node_modulesparte (ad esempio %AppData%\npmin Windows 7/8/10).


Vecchia storia

Sono praticamente nuovo su node.js, quindi non posso essere del tutto giusto, ma per la mia esperienza funziona in questo modo:

  1. -g non è un modo per installare librerie globali, è solo un modo per posizionarle sul percorso di sistema in modo da poterle chiamare dalla riga di comando senza scrivere il percorso completo su di esse. È utile, ad esempio, quindi l'app nodo sta convertendo i file locali, come di meno : se lo installi a livello globale puoi usarlo in qualsiasi directory.
  2. node.js stesso non ha esaminato la directory globale npm, sta usando un altro algoritmo per trovare i file richiesti: http://nodejs.org/api/modules.html#modules_file_modules (fondamentalmente sta scansionando ogni cartella nel percorso, iniziando dalla cartella corrente per node_modules e la controlla).

Vedi la domanda simile per maggiori dettagli: Come posso installare un modulo a livello globale usando npm?


17
Grazie mille, i link che hai fornito sono molto utili, ora sono molto più chiaro, anche se l'algoritmo di ricerca del modulo sembra un po 'complicato. Infine utilizzo la variabile di ambiente NODE_PATH per fare riferimento al percorso del modulo globale set NODE_PATH=C:\Documents and Settings\DevUser\Application Data\npm\node_modulese funziona come previsto. È strano che i moduli installati a livello globale siano posizionati in '% USERPROFILE% \ Application Data \ npm \ node_modules' su Windows, nel frattempo non ci possono essere virgolette in NODE_PATH.
Cosmore,

2
Felice di aiutare. La modifica di NODE_PATH non ha interrotto il percorso ai moduli node.js standard, come FS?
Alexey Ivanov

2
Persino mi chiedevo perché il mio C:\Program Files\nodejs\node_modules\npm\node_modulesnon avesse il modulo che ho appena installato usando npm install -g expressed era disponibile inC:\Documents and Settings\swapnil\Application Data\npm\node_modules
Swapnil Mhaske,

1
in Windows 8 il percorso è%USERPROFILE%\AppData\Roaming\npm\node_modules
Yar

9
Se vuoi scoprire dove si trova la tua directory globale node_modules, esegui il comando npm list -g. La prima riga di output sarà il genitore della directory globale node_modules - in altre parole, la directory globale node_modules è {output}\node_modules. npm install --global {xyz}
Stampa

34

se ti trovi nella piattaforma Windows 7 forse dovresti cambiare NODE_PATH in questo modo: %AppData%\npm\node_modules


7
è in appdata \ roaming anche su Windows 8
JonnyRaa,

6
Sono su Windows 8.1 con npm 2.5.1 e ho impostato il mio NODE_PATH come documentato, ma non riesco ancora a trovare i miei pacchetti installati. Pensieri?
JaKXz,

5
In Windows 10 dovrebbe essere solo% AppData% \ npm
gkiely

Nel mio caso (W10) era% AppData% \ Roaming \ npm
Hinrich

32

So di poter svegliare uno zombi, ma penso che sia ancora un problema, se hai bisogno di accesso globale ai moduli del nodo su Windows 7 devi aggiungere questo al tuo percorso variabile globale:

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

Importante: solo questo senza la node_modulesparte, mi ci è voluta mezz'ora per vedere questo.


4
In alternativa, per gli utenti di Windows 8% USERPROFILE% \ AppData \ Roaming \ npm
Benson

4
Grazie per il consiglio di rimuovere la node_modulesparte, stavo lottando anche con questo!
danguilherme,

20

Per farlo funzionare su Windows 10 l'ho risolto aggiungendo la cartella %USERPROFILE%\AppData\Roaming\npmal mio PERCORSO. Dopo aver \node_modulesaggiunto così: %USERPROFILE%\AppData\Roaming\npm\node_modules\non ha funzionato per me.


7
O, più semplicemente, `% AppData% \ npm`
Dan Diplo

Amico, è strano che abbia funzionato! Ho cercato questo problema per due giorni, letteralmente. Questa è la soluzione più oscura che ho provato e la prima che ha funzionato. Grazie mille.
Sarà

sì, basta aggiungere pathall'ambiente variabele, quindi possiamo eseguirlo direttamente in Windows 10
Zhu Xiaohu,

1
Mostrerebbe come eseguirlo effettivamente con un esempio, invece di dire cose come "aggiungi solo a ..."
Gabe Hiemstra,

14

Citerò solo dal post sul blog di questo nodo ...

In generale, la regola empirica è:

  • Se stai installando qualcosa che vuoi usare nel tuo programma, usando request ("qualunque"), quindi installalo localmente, alla radice del tuo progetto.
  • Se stai installando qualcosa che vuoi usare nella tua shell, dalla riga di comando o qualcosa, installalo a livello globale, in modo che i suoi binari finiscano nella tua variabile d'ambiente PATH.

...

Certo, ci sono alcuni casi in cui vuoi fare entrambe le cose. Coffee-script ed Express sono entrambi buoni esempi di app che hanno un'interfaccia a riga di comando, nonché una libreria. In questi casi, è possibile effettuare una delle seguenti operazioni:

  1. Installalo in entrambi i posti. Seriamente, sei così a corto di spazio su disco? Va bene, davvero. Sono piccoli programmi JavaScript.
  2. Installalo a livello globale, quindi npm link coffee-script o npm link express (se ti trovi su una piattaforma che supporta i collegamenti simbolici). Quindi devi solo aggiornare la copia globale per aggiornare anche tutti i collegamenti simbolici.

10
They’re tiny JavaScript programs.Alcune di queste librerie non sono certamente minuscole!
UpTheCreek

1
@UpTheCreek Sono fiducioso che si riferisse alle dimensioni nell'ambito dello spazio su disco. Sono file di testo. Sono oggettivamente piccoli.
Phillip Copley,

12

Per farla breve, utilizzare npm link jadenella directory dell'app.


4
Sembra npm link jadenon funzionare su Windows, npm restituisce un messaggio di errore come segue:npm ERR! Error: npm link not supported on windows
Cosmore

1
Lo fa ora, come per la versione v0.8.9
Gianfranco P.

@beyonddoor: devi eseguire npm linkda una finestra di comando dell'amministratore.
Mrchief,

12

Ho cercato di aggiungere / modificare le variabili di ambiente e giungere alla conclusione che:

  1. Modifica / aggiungi User variables(della casella superiore) anziché System variables(della parte inferiore); altrimenti devi "eseguire come amministratore" per farlo funzionare.
  2. Aggiungere ;%AppData%\npm a Pathper usarlo come strumento da riga di comando (se supportato, come jshinte grunt-cli).
  3. Crearlo NODE_PATHe impostarlo %AppData%\npm\node_modulesin modo da require('<pkg_name>')negli script senza installarlo nella directory del progetto. (Ma npm linkè suggerito per questo requisito se lavori su sistemi operativi mklinkcome Vista e successivi.)

Ambiente di test:

  • Win 7 (Ent., 64-bit, SP1), Node.js 4.2.4, npm 2.14.12
  • Win 8.1 (Ent., 64-bit), Node.js 0.10.30, npm 1.4.21

9

Mi sono divertito moltissimo a far funzionare i moduli globali. Alla fine, ho aggiunto esplicitamenteC:\Users\yourusername\AppData\Roaming\npm alla variabile PATH in Variabili di sistema. Avevo anche bisogno che questa variabile venisse prima della variabile del percorso nodejs nell'elenco.

Sto eseguendo Windows 10.


questa è l'unica cosa che ha funzionato per me. in esecuzione su windows 8
charlie carver il

1
Questa è l'unica cosa che ha funzionato anche per me, grazie!
Devqon,

6

Ho riscontrato questo problema su Windows 7, in esecuzione

npm install -g gulp

come amministratore durante l'accesso come utente normale.

Soluzione: eseguendo la stessa installazione dell'utente normale (non "esegui come admin" per cmd) tutto andava bene. Immagino sia correlato al percorso di installazione e ricerca predefinito.


1
Per chiarire un po 'di più questo punto ... Quando Node è installato come amministratore aggiorna il percorso di sistema per includere un riferimento alla cartella del modulo nodo globale degli amministratori. Quando un nuovo utente installa qualcosa a livello globale, lo installa in una cartella del modulo nodo diversa. Ogni utente diverso dall'utente che ha installato Nodo dovrà aggiornare il proprio percorso per includere la cartella del modulo nodo globale. Se si installa e si utilizza il nodo sullo stesso account, questo non sarà necessario.
dpsthree,

Windows 8.1 pro con nodejs v6.9.4, per impostare il percorso eseguito: C: \ Programmi \ nodejs \ nodevars.bat
Robot70

4

Dalla mia esperienza con win8.1 npm installa i moduli C:\Users\[UserName]\AppData\Roaming\npm\node_modules ma li cerca dumply C:\Users\[UserName]\node_modules.

Un semplice modulo di riferimento della soluzione nell'applicazione per percorso completo:

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

4

Per Windows, tutti hanno detto che dovresti impostare le variabili di ambiente per i moduli nodejs e npm, ma sai perché? Per alcuni moduli, hanno uno strumento da riga di comando, dopo aver installato il modulo, ci sono file [module] .cmd in C: \ Programmi \ nodejs , ed è usato per l'avvio nel comando della finestra. Quindi se non aggiungi il percorso contenente il file cmd alle variabili di ambiente % PATH% , non li avvierai con successo attraverso la finestra di comando.


2

Ho avuto lo stesso problema, cercando di installare Bower con npm install -g bower

Penso che ciò sia dovuto al fatto che il nodo è stato installato da un altro utente , non da me.

Ho disinstallato il nodo e quindi l'ho reinstallato. Durante l'installazione, ho visto questo testo per l'opzione Aggiungi a PERCORSO> Moduli npm :

Messaggio nell'installazione del nodo

inserisci qui la descrizione dell'immagine

Dopo l'installazione del nodo, l'ho eseguito di npm install -g bowernuovo. E ora funziona il pergolato.

Certo non è necessario reinstallare il nodo con il proprio utente, come me. La soluzione deve essere tramite le variabili NODE_PATH o PATH , come hanno spiegato altri utenti.

Questo è solo per notare che questo problema si verifica solo se il nodo è stato installato da un altro utente (o se durante l'installazione l'opzione Aggiungi a PERCORSO> moduli npm non è stata contrassegnata).


2

Per me ha lavorato su Windows 10 npm config set prefix %AppData%\npm\node_modules


1

In alternativa puoi aggiungere al prefisso~/.npmrc giusto . Ho 64 Win7.C:\Program Files\nodejs


1

Mi sono imbattuto in questa domanda perché voglio usare node.js con Visual Studio 2015 sul mio nuovo computer con Windows 10. Ho usato node.js su Windows 7 e 8 e 8.1 Mai un problema node.js trovare un modulo. Uso un legacy node.js 0.10.39 perché devo usare questa versione a causa del modulo seriale e RFXCOM.

La risposta per Windows 10 è impostare NODE_PATH nelle variabili di ambiente con C: \ Users \ User \ node_modules.


1
Ehm, no. (Windows 10 qui ..) Vedo alcuni moduli su C:\Users\User\node_modules Vedo alcuni moduli su C:\Users\User\AppData\Roaming\npm\node_modules Vedo alcuni moduli su C:\Users\User\node_modules Si trova anche su C:\Program Files (x86)\nodejs\node_modules\npm\node_modules Non sono sicuro di come ciò avvenga. Quale è quale e perché l'hanno fatto in quel modo?
zipzit,

1

Per Windows 10, ho dovuto installare localmente gulp nella cartella:

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

npm install gulp

Questo risolto il mio problema di "gulp non è riconosciuto"


0

Basta scaricare e reinstallare il nodo da questo e questo risolverà tutti i problemi del percorso.

Non dimenticare di riavviare il prompt dei comandi o il terminale.


0

Tutte le risposte di cui sopra non hanno funzionato per me. L'unica cosa che ha funzionato alla fine è stata l'aggiunta di% AppData% \ npm alla variabile Path dell'ambiente e di eliminare i due file ng in C: \ Programmi \ nodejs.

I pacchetti ng non erano installati in C: \ Programmi \ nodejs \ node_modules, quindi era evidente che l'uso del binario ng dalla directory nodejs non avrebbe funzionato.

Non sono sicuro del perché abbia cercato in questa directory, perché ho già configurato - variabile d'ambiente PATH - .npmrc in C: \ Users \ MyUser - Ho provato ad aggiungere variabili di sistema e / o NODE_PATH


-4

se si utilizza Windows, sono necessari alcuni passaggi, 1) creare un file chiamato package.json

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

dove ciao è il nome del pacchetto e * indica l'ultima versione della tua dipendenza

2) codificare nella directory del progetto ed eseguire il comando seguente

npm install

Installa le dipendenze


4
Questo non lo installa a livello globale (che la domanda pone). Questo attira la dipendenza nell'app
bryanmac,

Ho provato tutto quanto sopra elencato per provare a convincere la mia installazione node.js a riconoscere i moduli installati a livello globale, e NESSUNO funziona. Anche dopo aver disinstallato e reinstallato il nodo (v8.11.3 LTS), ogni volta che provo a emettere il comando request ("mongodb") in uno script node.js, ottengo l'errore SAME: "Impossibile trovare il modulo mongodb". Tuttavia, se eseguo il comando "npm ll -g mongodb", NPM mi dice che il modulo è installato. Qualcuno PER FAVORE mi può dare qualche infermiera che FUNZIONA con questo problema?
David Edwards,

AGGIORNAMENTO: Saulius sopra ha fornito una soluzione alternativa che funziona effettivamente, vale a dire specificando il percorso completo del modulo nell'istruzione JavaScript richiesto. Ma se la sua osservazione dichiarata sulla ricerca di node.js nelle cartelle sbagliate per i moduli installati è corretta, qualcuno può avvisare gli sviluppatori di node.js? Perché il problema è ANCORA influenzante v8.11.3 LTS.
David Edwards,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.