2010-09-06 17 views
104

Ho cercato la pagina dei moduli wiki, ma non riesco a trovare nulla di simile a virtualenv (python) o rvm.esiste un ambiente virtuale per node.js?

Chiunque qui separa node.js nel proprio ambiente? Non mi piace davvero installare npm in tutto il sistema.

risposta

29

Se disporre di pacchetti npm a livello di sistema è il problema principale, è consigliabile utilizzare il comando "bundle" molto interessante con npm. Questo è più vicino al congelamento delle gemme o all'uso di bundler in rotaie, piuttosto che rvm.

È semplicissimo. Basta creare un file package.json:

{ "name": "yourapp", "version": "0.0.1", "dependencies": {"jade": "0.4.1"}} 

e quindi eseguire:

npm bundle vendor 

o se la versione NPM è> = 1,0 run:

npm install 

di congelare nella directory vendor . e quindi utilizzare:

require.paths.unshift('./vendor'); 
+1

bundle npm non funziona. Non riconosciuto come comando – andho

+1

@andho Non l'ho ancora testato, ma capisco che le versioni recenti di NPM semplicemente usano 'npm install' per questo. –

+11

Testato e confermato ora. 'npm install' ha sostituito' npm bundle' a partire da NPM 1.0, credo. –

17

Ci sono anche alcuni sistemi di gestione versione nodo che possono aiutare.

Partenza Nave https://github.com/isaacs/nave

NVM potrebbe essere utilizzato anche https://github.com/creationix/nvm

C'è anche uno chiamato n risposta https://github.com/visionmedia/n

+1

Nvm funziona alla grande se ti piace avere diverse versioni di node.js e npm installate nello stesso momento. Per il resto ho trovato abbastanza per avere i moduli richiesti da installare per la directory di progetto con npm. –

+1

Se stai guardando 'nvm' o' n' e vuoi cambiare automaticamente quando cambi le directory, guarda a 'avn': https://github.com/wbyoung/avn – wbyoung

7

di bxjx è concettualmente accurata. Tuttavia, si noti che il comando bundle non accetta più una directory. È sempre rilascia pacchetti nella cartella node_modules, in modo che npm sappia dove trovarli in seguito (e può evitare le dipendenze per l'installazione doppia).

Qualsiasi soluzione probabilmente comporterà l'installazione di NPM e la navata "a livello di sistema" (cioè, nel vostro PATH, che potrebbe essere in qualche luogo ~), ma poi solo l'installazione dei dipendenze specifiche in un ambiente virtuale.

Ho risposto più accuratamente on the github issue.

tl; dr: Il caso d'uso è valido e utile, e mentre è per lo più lì, non è così ben servito come potrebbe essere. Dovremmo assicurarci di pensarci e farlo nel modo giusto.

166

nodeenv - ambiente virtuale per node.js (analogici) virtualenv

+0

Questo ha funzionato alla grande all'inizio, ma io non è stato in grado di ottenere l'installazione di npm fatta con nodeenv allo stesso tempo con node.js è compilato (su osx Lion). Probabilmente avrei potuto semplicemente usare nvm install e installare npm separatamente per ogni nodeenv ... quando ho pensato di provarlo avevo già versioni di nodi multipli già fatte con altri mezzi. –

+2

Può essere usato per installare _within_ un ambiente virtuale Python esistente, in modo che l'ambiente 'node.js' sia attivato insieme all'ambiente Python. Vedere ['nodeenv -p'] (https://github.com/ekalinin/nodeenv). – naitsirhc

+2

nodeenv (in realtà virtualenv + nodeenv) è adatto anche per gli utenti di fish-shell sin da nave e altri non supporta nessun'altra shell di bash e zsh. – akarca

1

Non sempre bisogno di installare le dipendenze globalmente. Di solito è raccomandato perché puoi usare i comandi forniti da un pacchetto npm, ma se lo installi localmente (nella directory node_modules), puoi anche usare questi comandi, si trovano solo nella directory node_modules/.bin/, quindi dovrai digitare node_modules/.bin/<command>, che è fastidioso, ma si può ovviamente aggiungere questo percorso alla variabile d'ambiente PATH:

export PATH=node_modules/.bin:$PATH 

Poi si può solo scrivere <command> e funziona!

In realtà c'è un comando di NPM che restituisce un percorso assoluto della .bin directory:

$ npm bin 
/path/to/node_modules/.bin 

Questo comando funziona anche quando sei in una sottodirectory del progetto, verrà restituito il primo node_modules/.bin directory che trova nelle sue directory madri.

È possibile aggiungere questo alias nel vostro .bashrc per aggiungere automaticamente la directory .bin/ al PATH:

alias nodebin='export PATH=$(npm bin):$PATH' 

Così, quando sei in una directory di un progetto che ha una directory node_modules/ nella radice, che si possibile digitare nodebin e quindi è possibile utilizzare tutti i comandi presenti nella directory .bin/!

0

penso che non ha senso a tutti di lavorare sull'ambiente nodo senza un nodo installato. È come se non avessi installato python e pip quando vuoi lavorare su un progetto python! ovviamente per usare virtualenv e virtualenvwrapper il pre-requisito è python.
Se si desidera lavorare su un progetto di nodo, è normale installare almeno il nodo e npm.
Se si desidera eseguire un progetto Python sul Web (ad esempio con Django), è possibile utilizzare la versione build del file javascript e caricare questo file nel progetto.

Problemi correlati