apakah ada lingkungan virtual untuk node.js?

133

Saya telah mencari halaman modul wiki, tetapi saya tidak dapat menemukan yang mirip dengan virtualenv (python) atau rvm.

Adakah yang memisahkan node.js di env mereka sendiri? Saya benar-benar tidak suka menginstal seluruh sistem npm.

Frangossauro
sumber

Jawaban:

44

Jika memiliki paket npm lebar sistem adalah masalah utama Anda, maka mungkin pertimbangkan untuk menggunakan perintah 'bundle' yang sangat keren dengan npm. Ini lebih dekat ke pembekuan permata atau menggunakan bundler di rails, daripada rvm.

Sangat mudah. Cukup buat file package.json:

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

lalu jalankan:

npm bundle vendor

atau jika versi npm Anda> = 1.0 jalankan:

npm install

membeku ke direktori vendor. lalu gunakan:

require.paths.unshift('./vendor');
bxjx
sumber
1
@ andho Belum menguji ini sendiri, tapi saya mengerti bahwa versi terbaru NPM hanya digunakan npm installuntuk ini.
Marnen Laibow-Koser
13
Diuji dan dikonfirmasi sekarang. npm installdiganti npm bundlepada NPM 1.0, saya percaya.
Marnen Laibow-Koser
184

nodeenv - lingkungan virtual untuk node.js (Analog virtualenv )

shorrty
sumber
Ini memang terlihat bagus di awal, tapi saya tidak bisa mendapatkan instalasi npm dilakukan dengan nodeenv pada saat yang sama dengan node.js dikompilasi (pada osx Lion). Mungkin saya bisa saja menggunakan nvm install dan instal npm secara terpisah untuk setiap nodeenv ... pada saat saya berpikir untuk mencobanya saya sudah memiliki beberapa versi node yang sudah dilakukan dengan cara lain.
Mikael Lepistö
2
Dapat digunakan untuk menginstal dalam lingkungan virtual Python yang ada, sehingga node.jslingkungan diaktifkan bersama dengan lingkungan Python. Lihat nodeenv -p.
naitsirhc
3
nodeenv (sebenarnya virtualenv + nodeenv) juga cocok untuk pengguna shell-fish karena nave dan yang lain tidak mendukung shell lain selain bash dan zsh.
akarca
1
Apakah ada yang setara virtualenv-wrapper untuk itu?
vmonteco
25

Ada juga beberapa sistem manajemen versi Node yang dapat membantu.

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

NVM juga dapat digunakan https://github.com/creationix/nvm

Ada juga yang disebut n https://github.com/visionmedia/n

Epeli
sumber
1
Nvm berfungsi dengan baik jika Anda hanya ingin menginstal berbagai versi node.js dan npm secara bersamaan. Untuk sisanya saya merasa cukup untuk memiliki modul yang diperlukan yang diinstal ke direktori proyek dengan npm.
Mikael Lepistö
2
Jika Anda melihat nvmatau ndan ingin beralih otomatis ketika Anda mengubah direktori, lihat avn: github.com/wbyoung/avn
wbyoung
1
Sejauh yang saya lihat n bukan lingkungan virtual. Itu masih berbagi semua perpustakaan yang terinstal secara global tetapi npm.
Yannic Hamann
7

Jawaban bxjx secara konseptual akurat. Namun, harap dicatat bahwa perintah bundel tidak lagi mengambil direktori. Itu selalu menjatuhkan paket ke node_modulesfolder, sehingga npm tahu di mana menemukannya nanti (dan dapat menghindari ketergantungan instal ganda).

Solusi apa pun mungkin melibatkan menginstal npm dan nave "sistem-lebar" (yaitu, di Anda PATH, yang mungkin di ~suatu tempat), tetapi kemudian hanya menginstal dependensi spesifik Anda di lingkungan virtual.

Saya merespons lebih menyeluruh pada masalah github .

tl; dr: Kasus penggunaannya valid dan bermanfaat, dan meskipun sebagian besar ada di sana, namun tidak sebaik yang seharusnya. Kita harus memastikan untuk memikirkannya dan melakukannya dengan benar.

isaacs
sumber
Masalah GitHub tampaknya tidak ada lagi. Apakah ada tautan yang diperbarui?
Drazisil
4

Anda tidak selalu perlu menginstal dependensi secara global. Biasanya ini direkomendasikan karena Anda dapat menggunakan perintah yang disediakan paket npm, tetapi jika Anda menginstalnya secara lokal (di node_modulesdirektori), Anda juga dapat menggunakan perintah ini, perintah itu hanya berakhir di node_modules/.bin/direktori, jadi Anda harus mengetik node_modules/.bin/<command>, yang menjengkelkan, tetapi tentu saja Anda dapat menambahkan jalur ini ke PATHvariabel lingkungan Anda :

export PATH=node_modules/.bin:$PATH

Maka Anda bisa mengetik <command>dan berfungsi!

Sebenarnya ada perintah npm yang mengembalikan jalur absolut ke .bindirektori:

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

Perintah ini juga berfungsi ketika Anda berada dalam subdirektori proyek, itu akan mengembalikan node_modules/.bindirektori pertama yang ditemukannya di direktori induknya.

Anda dapat menambahkan alias ini di Anda .bashrcuntuk secara otomatis menambahkan .bin/direktori ke PATH:

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

Jadi ketika Anda berada di direktori proyek yang memiliki node_modules/direktori di root, Anda bisa mengetik nodebindan kemudian Anda bisa menggunakan semua perintah yang ada di .bin/direktori!

gitaarik
sumber