2012-02-03 13 views
13

Ho installato NVM per node.js seguendo le istruzioni da questo post:Node Manager versione (NVM) NPM l'installazione di moduli di cartella comune

http://www.backdrifter.com/2011/02/18/using-nvm-and-npm-to-manage-node-js/

Quando passo tra le versioni dei nodi e quindi utilizzare NPM per installare un modulo, tutti i moduli sono collocati nella stessa cartella 'node_modules' (~/node_modules /) anziché nella directory 'node_modules' specifica per quella versione di nodo?

Qualche idea su come rimediare a questo?

risposta

29

Sulla base dei commenti da https://github.com/creationix/nvm/pull/97:

Durante l'installazione dei pacchetti con NPM utilizzando l'interruttore globale -g il pacchetto finisce nella directory appropriata (cioè .nvm/$ VERSION/lib/node_modules) , tuttavia il nodo non è in grado di richiederlo poiché in qualche modo non sta cercando sul suo prefisso.

Quindi, utilizzando npm install -g xxxxx metterà i moduli nella posizione corretta per NVM, ma se si tenta di require uno di loro nodo non riesce a trovare il modulo. Sto ancora giocando con questo e aggiornerò se trovo una soluzione.

Aggiornamento

dove viene messo NPM node_modules? (Vedi https://docs.npmjs.com/files/folders)

  • installazione locale (default): mette roba in ./node_modules della radice pacchetto corrente.
  • Installazione globale (con -g): inserisce elementi in/usr/local o ovunque sia installato il nodo.
  • Installarlo localmente se si sta andando a require() esso.
  • Installatelo globalmente se avete intenzione di eseguirlo sulla riga di comando.
  • Se è necessario entrambi, installarlo in entrambe le posizioni oppure utilizzare npm link.

Quindi quello che ho fatto è stato eseguito npm init (vedi http://npmjs.org/doc/init.html) nel mio dir progetti radice che ha generato package.json. Ora quando eseguo npm install xxxxx crea una dir node_modules nella mia cartella di progetto (che aggiungo al mio .gitignore). Questo funziona per i moduli che richiedo nel mio codice.

Per i comandi come CoffeeScript, installo con npm install -g coffee-script che lo inserisce nella directory corretta (.nvm/$ VERSION/lib/node_modules). Anche se non posso richiedere questi moduli (il collegamento npm dovrebbe risolvere questo problema) posso eseguire i comandi, ad esempio coffee.

+0

Finalmente una buona risposta a questo, mi ha sbattuto la testa per un po '. –

1

Ho appena installato express globalmente (-g) e ho riscontrato un problema quando richiesto ("express"). Proprio come Jesse Vogt ha detto che ho appena reinstallato express ma questa volta senza il -g proprio come questo: "sudo npm install express" e ora funziona perfettamente!

+0

Puoi spiegare perché ha funzionato? –

+0

Per essere onesto con te; Non lo so, sono abbastanza principiante con questo. Tuttavia, navigando sul web che Jesse ha lasciato (https: //docs.npmjs.com/getting-started/installing-npm-packages-local) Ho trovato il seguente: "Se vuoi dipendere dal pacchetto del tuo modulo usando qualcosa come Node, allora vuoi installare localmente ..." Non capisco molto bene la differenza ma di sicuro se è necessario usare require() per eseguire un server, si dovrà effettuare l'installazione localmente (senza il -g), perché questo funziona per me. –

+0

Grazie per l'elaborazione :) –

Problemi correlati