2012-12-13 12 views
5

Mi piacerebbe avere i miei moduli Node memorizzati in una posizione centralizzata, ad esempio, /var/http/common/ e avere la mia app in diretta/in esecuzione in un'altra posizione, ad esempio /var/http/www/apps/APP#1_NAME/.node_modules centralizzati

sono stato in grado di impostare la richiede in server.js di utilizzare i percorsi relativi come require('../../../common/express'), ma dalla lettura posts per autore di NPM, suona come io sto hacking, e dovrei usare npm link per creare un punto di riferimento "locale" per Nodo (che simbolizza la vera installazione).

ho installato i miei moduli nodo /var/http/common/, ma poi quando ho cercato di creare il collegamento simbolico (npm link ../../../common/node_modules/express), NPM sembra abbia trattato come un esplicito "globale" installare e reinstallato in /usr/local/lib/node_modules/express (e creato un link "locale" ad esso ./node_modules/express ->) che non è quello che mi aspettavo che succedesse. E 'questo quello che voglio veramente? Dovrei usare npm config set prefix prima?

risposta

3

Risulta: avrei dovuto impostare npm config set prefix prima di fare qualsiasi altra cosa.

Potrebbe sembrare che npm link e npm install -g facciano la stessa cosa; tuttavia, mentre npm link installa il modulo a livello globale, lo crea un collegamento simbolico locale in node_modules che punta a $prefix/lib/node_modules/$module. MaxGfeller non è corretto: senza quel collegamento simbolico locale, il nodo si lamenterà di non riuscire a trovare i moduli (installati globalmente). Ciò è determinato attraverso i miei tentativi, così come si deduce dal npm help folders:

• Installarlo localmente se avete intenzione di richiedere () esso.

• Installarlo globalmente se si sta andando a correre sulla linea di comando .

• Se è necessario entrambi, quindi installarlo in entrambi i luoghi, o utilizzare collegamento NPM.

Questo non indirizza in modo specifico ciò che ho chiesto: voglio che i moduli siano memorizzati in una posizione centrale (accessibile da più applicazioni Node) ma non mi interessa utilizzarli dal comando come- Voglio solo usarli in require('').

quanto riguarda la mia domanda su come utilizzare percorsi relativi a require(''), non ho ancora ottenuto/trovato una risposta autorevole per questo, ma sembrerebbe dalla esistenza di npm link che l'utilizzo di percorsi rel non è l'intento dell'autore. Per me sembra un caso di six-of-one, ma mi piacerebbe rimanere coerente con lo standard di Node.

+0

pensa di aver bisogno di $ NODE_PATH impostato per evitare il collegamento simbolico locale –

2

È possibile installare i moduli di nodo globalmente utilizzando l'aggiunta di "-g" al comando. Per esempio:

npm install express -g 

Nel codice è possibile utilizzare normalmente:

require('express'); 

I moduli vengono poi memorizzati in/usr/local/lib/node_modules

+0

Ciao Max. Grazie, ma non li voglio installati in quella posizione (dovrei aver usato prima il prefisso di configurazione di npm?). Inoltre stavo chiedendo perché non ho eseguito l'installazione di npm, ho eseguito il collegamento npm; quindi voglio sapere perché ha anche eseguito un'installazione, forse perché ha rilevato che i moduli non sono stati installati nella posizione globale predefinita? – jacob

Problemi correlati