czy istnieje wirtualne środowisko dla node.js?

139

Przeszukałem stronę modułów wiki, ale nie mogę znaleźć niczego podobnego do virtualenv (python) lub rvm.

Czy ktoś tutaj oddziela node.js we własnym środowisku env? Naprawdę nie lubię instalować npm w całym systemie.

Frangossauro
źródło

Odpowiedzi:

44

Jeśli głównym problemem jest posiadanie pakietów npm dla całego systemu, może rozważ użycie bardzo fajnego polecenia „bundle” z npm. Jest to bardziej zbliżone do zamrażania klejnotów lub używania bundlera w szynach niż rvm.

To bardzo łatwe. Po prostu utwórz plik package.json:

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

a następnie uruchom:

npm bundle vendor

lub jeśli twoja wersja npm jest> = 1.0 uruchom:

npm install

zamrozić w katalogu dostawcy. a następnie użyj:

require.paths.unshift('./vendor');
bxjx
źródło
1
@andho Nie testowałem tego samodzielnie, ale rozumiem, że najnowsze wersje NPM po prostu npm installdo tego używają .
Marnen Laibow-Koser
13
Przetestowane i potwierdzone teraz. Wydaje mi się, że npm installwymieniony npm bundleod NPM 1.0.
Marnen Laibow-Koser
186

nodeenv - wirtualne środowisko dla node.js (Analog virtualenv )

shorrty
źródło
Na początku wyglądało to świetnie, ale nie udało mi się wykonać instalacji npm z nodeenv w tym samym czasie, gdy kompilowany jest node.js (na osx Lion). Prawdopodobnie mógłbym po prostu użyć nvm install i zainstalować npm osobno dla każdego nodeenv ... zanim pomyślałem o wypróbowaniu, miałem już wiele wersji węzłów wykonanych innymi środkami.
Mikael Lepistö
2
Można go użyć do zainstalowania w istniejącym środowisku wirtualnym Python, tak aby node.jsśrodowisko było aktywowane wraz ze środowiskiem Python. Zobacz nodeenv -p.
naitsirhc
3
nodeenv (właściwie virtualenv + nodeenv) jest również odpowiedni dla użytkowników fish-shell, ponieważ nave i inne nie obsługują żadnych innych powłok niż bash i zsh.
akarca
1
Czy istnieje dla niego również odpowiednik virtualenv-wrappera?
vmonteco
25

Istnieje również kilka systemów zarządzania wersjami węzłów, które mogą pomóc.

Sprawdź Nave https://github.com/isaacs/nave

NVM może być również używany https://github.com/creationix/nvm

Jest też jeden o nazwie n https://github.com/visionmedia/n

Epeli
źródło
1
Nvm działa świetnie, jeśli po prostu chcesz mieć różne wersje node.js i npm zainstalowane w tym samym czasie. Co do reszty, wystarczyło zainstalować wymagane moduły w katalogu projektu za pomocą npm.
Mikael Lepistö
2
Jeśli patrzysz na nvmlub ni chcesz automatycznie przełączać się po zmianie katalogów, spójrz na avn: github.com/wbyoung/avn
wbyoung
1
O ile widzę, n nie jest środowiskiem wirtualnym. Wciąż współużytkuje wszystkie globalnie zainstalowane biblioteki, ale npm.
Yannic Hamann
7

Odpowiedź bxjx jest koncepcyjnie dokładna. Należy jednak pamiętać, że polecenie bundle nie zajmuje już katalogu. To zawsze spada paczki do node_modulesfolderu, tak że npm wie gdzie je znaleźć później (i może uniknąć podwójnej instalacji zależnościami).

Każde rozwiązanie będzie prawdopodobnie wymagało zainstalowania npm i nawy „ogólnosystemowej” (czyli w Twoim PATH w całym , który może być ~gdzieś indziej), ale potem tylko zainstalowanie określonych zależności w środowisku wirtualnym.

Dokładniej odpowiedziałem w sprawie github .

tl; dr: Przypadek użycia jest ważny i pomocny i chociaż jest tam głównie, nie jest tak dobrze obsługiwany, jak mógłby być. Powinniśmy się upewnić, że dobrze to przemyśleliśmy.

isaacs
źródło
Wydaje się, że problem z GitHub już nie istnieje. Czy jest zaktualizowany link?
Drazisil
4

Nie zawsze musisz instalować zależności globalnie. Zwykle jest to zalecane, ponieważ wtedy możesz użyć poleceń dostarczanych przez pakiety npm, ale jeśli zainstalujesz je lokalnie (w node_moduleskatalogu), możesz również użyć tych poleceń, zostaną one tylko umieszczone w node_modules/.bin/katalogu, więc będziesz musiał wpisać node_modules/.bin/<command>, co jest denerwujące, ale możesz oczywiście dodać tę ścieżkę do swojej PATHzmiennej środowiskowej:

export PATH=node_modules/.bin:$PATH

Następnie możesz po prostu wpisać <command>i działa!

W rzeczywistości istnieje polecenie npm, które zwraca bezwzględną ścieżkę do .binkatalogu:

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

To polecenie działa również, gdy jesteś w podkatalogu projektu, zwróci pierwszy node_modules/.binkatalog, który znajdzie w swoich katalogach nadrzędnych.

Możesz dodać ten alias do swojego, .bashrcaby automatycznie dodać .bin/katalog do PATH:

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

Więc kiedy jesteś w katalogu projektu, który ma node_modules/katalog w katalogu głównym, możesz pisać, nodebina następnie możesz używać wszystkich poleceń znajdujących się w .bin/katalogu!

gitaarik
źródło