Gibt es eine virtuelle Umgebung für node.js?

133

Ich habe die Seite mit den Wiki-Modulen durchsucht, kann jedoch nichts Ähnliches wie virtualenv (Python) oder rvm finden.

Trennt hier jemand node.js in seiner eigenen Umgebung? Ich mag es wirklich nicht, npm systemweit zu installieren.

Frangossauro
quelle

Antworten:

44

Wenn systemweite npm-Pakete Ihr Hauptproblem sind, sollten Sie den sehr coolen Befehl 'bundle' mit npm verwenden. Dies ist näher am Einfrieren von Edelsteinen oder an der Verwendung von Bündlern in Schienen als an RVM.

Es ist super einfach. Erstellen Sie einfach eine package.json-Datei:

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

und dann ausführen:

npm bundle vendor

oder wenn Ihre npm-Version> = 1.0 ist, führen Sie Folgendes aus:

npm install

in das Herstellerverzeichnis einfrieren. und dann benutze:

require.paths.unshift('./vendor');
bxjx
quelle
1
@andho Habe das nicht selbst getestet, aber ich verstehe, dass neuere Versionen von NPM einfach dafür verwendet werden npm install.
Marnen Laibow-Koser
13
Jetzt getestet und bestätigt. npm installersetzt , npm bundlewie von NPM 1.0, glaube ich.
Marnen Laibow-Koser
184

nodeenv - virtuelle Umgebung für node.js (Analog virtualenv )

shorrty
quelle
Das sah anfangs gut aus, aber ich konnte die npm-Installation nicht gleichzeitig mit nodeenv durchführen, während node.js kompiliert wurde (unter osx Lion). Wahrscheinlich hätte ich nvm install und npm für jede Nodeenv separat installieren können ... Als ich daran dachte, es zu versuchen, hatte ich bereits mehrere Node-Versionen mit anderen Mitteln.
Mikael Lepistö
2
Kann zur Installation in einer vorhandenen virtuellen Python-Umgebung verwendet werden, sodass die node.jsUmgebung zusammen mit der Python-Umgebung aktiviert wird. Siehe nodeenv -p.
naitsirhc
3
nodeenv (eigentlich virtualenv + nodeenv) ist auch für Benutzer von Fischschalen geeignet, da nave und andere keine anderen Schalen als bash und zsh unterstützen.
Akarca
1
Gibt es auch ein Virtualenv-Wrapper-Äquivalent dafür?
vmonteco
25

Es gibt auch einige Node-Versionsverwaltungssysteme, die helfen können.

Schauen Sie sich Nave https://github.com/isaacs/nave an

NVM kann auch unter https://github.com/creationix/nvm verwendet werden

Es gibt auch eine mit dem Namen n https://github.com/visionmedia/n

Epeli
quelle
1
Nvm funktioniert hervorragend, wenn Sie nur verschiedene Versionen von node.js und npm gleichzeitig installieren möchten. Für den Rest fand ich es genug, dass Module mit npm im Projektverzeichnis installiert werden mussten.
Mikael Lepistö
2
Wenn Sie beim Wechseln der Verzeichnisse nach nvmoder suchen nund automatisch wechseln möchten, schauen Sie unter avn: github.com/wbyoung/avn
wbyoung
1
Soweit ich sehe, ist n keine virtuelle Umgebung. Es teilt alle global installierten Bibliotheken außer npm.
Yannic Hamann
7

Die Antwort von bxjx ist konzeptionell korrekt. Beachten Sie jedoch, dass der Befehl bundle kein Verzeichnis mehr belegt. Es immer fällt Pakete in den node_modulesOrdner, so dass npm weiß , wo sie später finden (und kann doppelt Installation Abhängigkeiten vermeiden).

Jede Lösung wird wahrscheinlich die Installation von npm und nave "systemweit" beinhalten (dh in Ihrem PATH, was sich ~irgendwo befinden könnte), aber dann nur Ihre spezifischen Abhängigkeiten in der virtuellen Umgebung.

Ich antwortete gründlicher auf das Github-Problem .

tl; dr: Der Anwendungsfall ist gültig und hilfreich, und obwohl er meistens vorhanden ist, ist er nicht so gut bedient, wie er sein könnte. Wir sollten sicherstellen, dass wir es uns überlegen und es richtig machen.

isaacs
quelle
Das GitHub-Problem scheint nicht mehr zu bestehen. Gibt es einen aktualisierten Link?
Drazisil
4

Sie müssen Abhängigkeiten nicht immer global installieren. Normalerweise wird dies empfohlen, da Sie dann die Befehle verwenden können, die ein npm-Paket bereitstellt. Wenn Sie es jedoch lokal (im node_modules) Verzeichnis installieren , können Sie diese Befehle auch verwenden. Sie werden nur im node_modules/.bin/Verzeichnis angezeigt, sodass Sie Folgendes eingeben müssen node_modules/.bin/<command>: Das ist ärgerlich, aber Sie können diesen Pfad natürlich zu Ihrer PATHUmgebungsvariablen hinzufügen :

export PATH=node_modules/.bin:$PATH

Dann können Sie einfach tippen <command>und es funktioniert!

Es gibt tatsächlich einen npm-Befehl, der einen absoluten Pfad zum .binVerzeichnis zurückgibt :

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

Dieser Befehl funktioniert auch, wenn Sie sich in einem Unterverzeichnis des Projekts befinden. Er gibt das erste node_modules/.binVerzeichnis zurück, das in den übergeordneten Verzeichnissen gefunden wird.

Sie können diesen Alias ​​in Ihr Verzeichnis .bashrceinfügen, um das .bin/Verzeichnis automatisch zu Ihrem Verzeichnis hinzuzufügen PATH:

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

Wenn Sie sich also in einem Verzeichnis eines Projekts befinden, das ein node_modules/Verzeichnis im Stammverzeichnis hat, können nodebinSie Folgendes eingeben und dann alle Befehle verwenden, die sich im .bin/Verzeichnis befinden!

Gitaarik
quelle