Installazione globale NPM "impossibile trovare il modulo"


206

Ho scritto un modulo che ho pubblicato su npm un momento fa (https://npmjs.org/package/wisp)

Quindi si installa bene dalla riga di comando:

$ npm i -g wisp

Tuttavia, quando lo eseguo dalla riga di comando, continuo a ricevere un errore che optimist non è installato:

$ wisp 
Error: Cannot find module 'optimist'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:12:10)
    at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:96:4)
    at Module._compile (module.js:449:26)
    at Object.exports.run (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/coffee-script.js:68:25)
    at compileScript (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:135:29)
    at fs.stat.notSources.(anonymous function) (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:110:18)

Tuttavia, ho specificato in package.json come dipendenza:

{
  "name": "wisp",
  "author": "Brendan Scarvell <bscarvell@gmail.com>",
  "version": "0.1.0",
  "description": "Global nodejs file server",
  "dependencies": {
    "optimist": "~0.3.4"
  },
  "repository": "git://github.com/tehlulz/wisp",
  "bin": {
    "wisp" : "./wisp"
  }
}

Qualcuno sa cosa fare per farlo funzionare? So che ha a che fare con la parte bin che aggiunge l'eseguibile al bin e che node_modules in quella directory è vuota. Non ho idea di come risolverlo.


cosa succede se si installa senza l'opzione -g?
Vinayr,

Installa una cartella node_modules nella directory corrente che ha un wisp al suo interno.
Menztrual,

Lo so. Ricevi ancora errori?
Vinayr,

Sì. Se provo a eseguire il wisp dopo aver eseguito un npm locale i wisp, restituisce comunque lo stesso errore
Menztrual,

Ho appena installato il tuo modulo. Funziona bene per me. Dov'è il tuo fiocco? Nel mio caso ho corso ./node_modules/wisp/wispche funziona bene.
Vinayr,

Risposte:


370

Per chiunque si imbattesse in questo, ho avuto questo problema a causa della mia npminstallazione in una posizione che non è sul mio NODE_PATH.

[root@uberneek ~]# which npm
/opt/bin/npm
[root@uberneek ~]# which node
/opt/bin/node
[root@uberneek ~]# echo $NODE_PATH

Il mio NODE_PATH era vuoto e in esecuzione ha npm install --global --verbose promised-iomostrato che si stava installando in /opt/lib/node_modules/promised-io:

[root@uberneek ~]# npm install --global --verbose promised-io
npm info it worked if it ends with ok
npm verb cli [ '/opt/bin/node',
npm verb cli   '/opt/bin/npm',
npm verb cli   'install',
npm verb cli   '--global',
npm verb cli   '--verbose',
npm verb cli   'promised-io' ]
npm info using npm@1.1.45
npm info using node@v0.8.4
[cut]
npm info build /opt/lib/node_modules/promised-io
npm verb from cache /opt/lib/node_modules/promised-io/package.json
npm verb linkStuff [ true, '/opt/lib/node_modules', true, '/opt/lib/node_modules' ]
[cut]

La mia sceneggiatura non riesce require('promised-io/promise'):

[neek@uberneek project]$ node buildscripts/stringsmerge.js 

module.js:340
    throw err;
          ^
Error: Cannot find module 'promised-io/promise'
    at Function.Module._resolveFilename (module.js:338:15)

Probabilmente ho installato node e npm dalla sorgente usando configure --prefix=/opt. Non ho idea del perché ciò li abbia resi incapaci di trovare i moduli installati. La soluzione per ora è di puntare NODE_PATH nella directory giusta:

export NODE_PATH=/opt/lib/node_modules

Il mio require('promised-io/promise')adesso ci riesce.


10
dove impostare questo NODE_PATH ??
sabbioso,

8
@sandy dove imposti la variabile d'ambiente NODE_PATH dipende dal tuo sistema operativo. Sto usando un sapore di Linux, quindi l'ho export NODE_PATH=...impostato nella shell locale in modo che venga esportato in comandi eseguiti in quella shell. Per rendere la modifica persistente o disponibile per tutte le shell, inserirla in .profile o simile. Il concetto nel suo insieme è fastidiosamente complesso per il principiante, prova a leggere help.ubuntu.com/community/EnvironmentVariables . Per Windows, ti consigliamo di passare a Linux. OK, sto solo scherzando. Prova computerhope.com/issues/ch000549.htm o cercalo su Google.
Neek,

13
Per OSX Lion, seguire ha funzionato per me ... export NODE_PATH = / usr / local / lib / node_modules Ho usato 'individuare node_modules' per rintracciare il percorso giusto.
keran

2
NODE_PATH funziona anche per WINDOWS. questo è radicato nei moduli del nodo che possono essere installati sia localmente che globalmente.
tintinnio

5
Se hai installato Node.js con Homebrew su Mac OS X: esegui open -a TextEdit ~/.bash_profilein Terminale, quindi aggiungi export NODE_PATH=/usr/local/lib/node_modulesalla fine del file. Riavvia la finestra del terminale. Ora in esecuzione echo $NODE_PATHdovrebbe stampare /usr/local/lib/node_modules.
Pwdr,

39

aggiungi questo all'inizio di prog (mac):

module.paths.push('/usr/local/lib/node_modules');


4
Qualche modo per farlo in un modo non-os specifico?
UpTheCreek,

@UpTheCreek questo è un modo specifico non-os. È il codice JS, devi solo puntare a un node_modules che ha il modulo che stai cercando
Adelin,

@Adelin - È una soluzione specifica del sistema operativo perché la posizione dei nodi_moduli globali è specifica del sistema operativo. Ad esempio, se stai sviluppando su Windows ed esegui Linux in produzione, questa non è un'ottima soluzione.
UpTheCreek

Questo è facilmente superato. Ad esempio, è possibile salvare il percorso del nodo in una variabile env, ad esempio, e sostituire il percorso hardcoded con os.environ.nodepath(qualcosa lungo queste linee).
Adelin,

macOS Mojave 10.14.6 richiede l'aggiunta dell'esportazione NODE_PATH = / usr / local / lib / node_modules / npm / node_modules a ~ / bash_profile che è più indipendente dalla macchina in quanto il codice nativo .js non è interessato.
vwvan,

16

Per impostazione predefinita, il nodo non guarda all'interno del / usr / local / lib / node_module per caricare i moduli globali. Fare riferimento al caricamento del modulo spiegato in http://nodejs.org/api/modules.html#modules_loading_from_the_global_folders

Quindi o devi 1) aggiungere il / usr / local / lib / node_module a NODE_PATH ed esportarlo o 2) copiare i moduli del nodo installati in / usr / local / lib / node. (Come spiegato nel collegamento per il caricamento del nodo del modulo cercherà in questo percorso e funzionerà)


10

Per alcuni (come me) che nient'altro ha funzionato, prova questo:

brew cleanup
brew link node
brew uninstall node
brew install node

Spero che aiuti qualcuno :)


9

La seguente correzione generica sarebbe per qualsiasi modulo. Ad esempio con request-promise.

Sostituire

npm install request-promise --global

Con

npm install request-promise --cli

lavorato ( fonte ) e anche perglobals einherits

Inoltre, prova a impostare la variabile di ambiente

NODE_PATH=%AppData%\npm\node_modules


3

$ vim /etc/profile.d/nodejs.sh

NODE_PATH=/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript
export NODE_PATH="$NODE_PATH"

Questo è lì per impostazione predefinita. Per gli utenti è caricato, ma mentre viene eseguito come root non lo è, pertanto deve essere incluso nel percorso dell'utente root.
Criceto

2

Per Windows, da Nodejs non riesci a trovare il modulo installato su Windows? ciò che ha funzionato per me è eseguire npm link come in

npm link wisp

Un avvertimento: ho fatto questo ma non ho potuto utilizzare il mio codice zippato con AWS lambda. Ho dovuto avere il node_module creato localmente come in npm install wisp --save(senza l'opzione -g)
PM

2

Per utenti Mac È meglio usare l'installazione manuale:

Per ridurre al minimo la possibilità di errori di autorizzazione, è possibile configurare npm per utilizzare una directory diversa. In questo esempio, sarà una directory nascosta nella cartella principale.

  1. Eseguire il backup del computer prima di iniziare.

  2. Crea una directory per installazioni globali:

    mkdir ~ / .npm-global

  3. Configurare npm per utilizzare il nuovo percorso della directory:

    npm config set prefisso '~ / .npm-global'

  4. Apri o crea un file ~ / .profile e aggiungi questa riga:

    export PATH = ~ / .npm-global / bin: $ PATH

  5. Tornando alla riga di comando, aggiorna le variabili di sistema:

    fonte ~ / .profile

  6. Test: scarica un pacchetto a livello globale senza usare sudo.

    npm installa -g jshint

Invece dei passaggi 2-4, è possibile utilizzare la variabile ENV corrispondente (ad esempio se non si desidera modificare ~ / .profile):

NPM_CONFIG_PREFIX=~/.npm-global

Riferimento: https://docs.npmjs.com/getting-started/fixing-npm-permissions


1

Ha avuto lo stesso problema su uno dei server di test in esecuzione Ubuntusotto root. Poi creato un nuovo utente utilizzando useradd -m myusere tutto installato ( nvm, node, pacchetti) come myuser. Ora funziona benissimo.


1

Su Windows se hai appena eseguito un'installazione pulita e ottieni questo, devi scaricare la cache npm in \ AppData \ Roaming


1

Nel mio caso entrambi nodeed npmerano nello stesso percorso ( /usr/bin). L' NODE_PATHera vuoto, in modo che il npmposto dei moduli globali in /usr/lib/node_modulescui require(...)trovare con successo loro. L'unica eccezione era il npmmodulo, fornito con il pacchetto nodejs. Dal momento che sto usando il sistema a 64 bit, è stato inserito /usr/lib64/node_modules. Questo non è dove richiedono (...) ricerche in caso di vuoto NODE_PATHe nodo avviato da /usr/bin. Quindi avevo due opzioni:

  • link /usr/lib64/node_modules/npma/usr/lib/node_modules/npm
  • passare da moduli /usr/lib/node_modules/*a /usr/lib64/node_modules/KitNODE_PATH=/usr/lib64/node_modules

Entrambi hanno funzionato. Sto usando OpenSUSE 42.1 e il pacchetto nodejs dal repository degli aggiornamenti. La versione è 4.4.5.


1

L'ho fatto in modo semplice ...

  1. Disinstalla nodo dal pannello di controllo [Windows 7]
  2. Installa di nuovo il nodo
  3. Installa npm install --global --verbose protractor
    il gestore driver web aggiornamento aggiornamento.

funziona bene per me.

Spero che questo ti aiuti ....


1

Ho ricevuto questo errore Error: Cannot find module 'number-is-nan' mentre il modulo esiste davvero. Era a causa di un'installazione Node.js errata / incompleta.

Per Windows, come suggerito da altre risposte, è necessaria un'installazione Node pulita :

  • Disinstallare Node.js
  • Elimina le due cartelle npme npm_cachedentroC:\Users\user\AppData\Roaming
  • Riavvia Windows e installa Node.js
  • Esegui npm inito ( npm init --yesper la configurazione predefinita )
  • Impostare la variabile di ambiente Windows per NODE_PATH. Questo percorso è dove sono installati i tuoi pacchetti. Probabilmente è qualcosa del genereNODE_PATH = C:\Users\user\node_modules or C:\Users\user\AppData\Roaming\npm\node_modules
  • Avviare una nuova console cmd e npmdovrebbe funzionare correttamente

Nota :

Prova gli ultimi punti prima di reinstallare Node.js, potrebbe farti risparmiare un po 'di tempo ed evitare di reinstallare tutti i tuoi pacchetti.


1

Ho appena incontrato questo problema del axiosmodulo. Poi ho provato questo: corri rm -rf node_modulese yarn. E funziona


0

Ho avuto lo stesso errore dell'OP, ma ho potuto esaminare i registri sh: node: command not found.

Si scopre che il programma / usr / bin / node (symlink) non è più installato con apt install nodejs. Una volta concatenati /usr/bin/node' tonodejs, npm install -g @ angular / cli` è riuscito.

Il modo corretto di installarlo su debian è apt install nodejs-legacy.


0

Ho dovuto aggiungere C: \ Users \ {Username} \ AppData \ Roaming \ npm alle mie variabili env e quindi ho potuto installare roba.

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.