esiste un ambiente virtuale per node.js?


133

Ho cercato nella pagina dei moduli wiki, ma non trovo nulla di simile a virtualenv (python) o rvm.

Qualcuno qui separa node.js nella propria env? Non mi piace installare npm a livello di sistema.

Risposte:


44

Se il tuo problema principale è avere pacchetti npm a livello di sistema, allora potresti prendere in considerazione l'uso del comando 'bundle' molto interessante con npm. Questo è più vicino al congelamento delle gemme o all'utilizzo del bundler nelle rotaie, piuttosto che a rvm.

È semplicissimo. Basta creare un file package.json:

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

e poi esegui:

npm bundle vendor

o se la tua versione di npm è> = 1.0 run:

npm install

per congelare nella directory del fornitore. e quindi usa:

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

1
@andho Non l'ho provato da solo, ma capisco che le recenti versioni di NPM lo usano semplicemente npm installper questo.
Marnen Laibow-Koser,

13
Testato e confermato ora. npm installsostituito npm bundleda NPM 1.0, credo.
Marnen Laibow-Koser,

184

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


All'inizio sembrava fantastico, ma non sono stato in grado di eseguire l'installazione di npm con nodeenv contemporaneamente con node.js compilato (su osx Lion). Probabilmente avrei potuto usare nvm install e installare npm separatamente per ogni nodeenv ... quando ho pensato di provarlo avevo già fatto più versioni di nodo con altri mezzi.
Mikael Lepistö,

2
Può essere utilizzato per l'installazione all'interno di un ambiente virtuale Python esistente, in modo che l' node.jsambiente venga attivato insieme all'ambiente Python. Vedere nodeenv -p.
naitsirhc,

3
nodeenv (in realtà virtualenv + nodeenv) è adatto anche per gli utenti di fish-shell dal momento che nave e altri non supportano altre shell oltre a bash e zsh.
akarca,

1
Esiste anche un equivalente di virtualenv-wrapper per questo?
vmonteco,

25

Ci sono anche alcuni sistemi di gestione delle versioni dei Nodi che possono aiutare.

Dai un'occhiata a Nave https://github.com/isaacs/nave

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

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


1
Nvm funziona alla grande se ti piace avere diverse versioni di node.js e npm installate contemporaneamente. Per il resto l'ho trovato abbastanza per aver richiesto l'installazione dei moduli nella directory di progetto con npm.
Mikael Lepistö,

2
Se stai guardando nvmo nvuoi cambiare automaticamente quando cambi directory, guarda avn: github.com/wbyoung/avn
wbyoung,

1
Per quanto vedo n non è un ambiente virtuale. Sill condivide tutte le librerie installate a livello globale, ma npm.
Yannic Hamann

7

La risposta di bxjx è concettualmente accurata. Tuttavia, si noti che il comando bundle non accetta più una directory. E ' sempre cade pacchetti nella node_modulescartella, in modo che NPM sa dove trovare in un secondo momento (e può evitare dipendenze doppio-installazione).

Qualsiasi soluzione implicherà probabilmente l'installazione di npm e nave "a livello di sistema" (ovvero, nel tuo PATH, che potrebbe trovarsi ~da qualche parte), ma solo l'installazione di dipendenze specifiche nell'ambiente virtuale.

Ho risposto più approfonditamente al problema github .

tl; dr: il caso d'uso è valido e utile, e mentre è principalmente lì, non è ben servito come potrebbe essere. Dovremmo assicurarci di pensarci bene e farlo bene.


Il problema di GitHub sembra non esistere più. C'è un link aggiornato?
Drazisil,

4

Non è sempre necessario installare dipendenze a livello globale. Di solito è consigliato perché poi puoi usare i comandi forniti da un pacchetto npm, ma se lo installi localmente (nella node_modulesdirectory), puoi anche usare questi comandi, finiranno solo nella node_modules/.bin/directory, quindi dovrai digitare node_modules/.bin/<command>, che è fastidioso, ma puoi ovviamente aggiungere questo percorso alla tua PATHvariabile di ambiente:

export PATH=node_modules/.bin:$PATH

Quindi puoi semplicemente digitare <command>e funziona!

In realtà esiste un comando npm che restituisce un percorso assoluto alla .bindirectory:

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

Questo comando funziona anche quando ci si trova in una sottodirectory del progetto, restituirà la prima node_modules/.bindirectory che trova nelle sue directory principali.

Puoi aggiungere questo alias nel tuo .bashrcper aggiungere automaticamente la .bin/directory al tuo PATH:

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

Quindi quando ti trovi in ​​una directory di un progetto che ha una node_modules/directory nella radice, puoi digitare nodebine quindi puoi usare tutti i comandi che si trovano nella .bin/directory!



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.