2010-09-06 196 views
104

我已經搜索了wiki模塊頁面,但找不到類似於virtualenv(python)或rvm的任何內容。有沒有node.js的虛擬環境?

這裏的任何人在他們自己的環境中分離node.js?我真的不喜歡在系統範圍內安裝npm。

回答

29

如果系統範圍的npm包是你的主要問題,那麼也許考慮在npm中使用非常酷的'bundle'命令。這更接近於凍結寶石或在rails中使用bundler,而不是rvm。

這很容易。只要創建一個文件的package.json:

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

,然後運行:

npm bundle vendor 

,或者如果您的NPM版本爲> = 1.0運行:

npm install 

凍結在供應商目錄。然後使用:

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

npm包不起作用。沒有被識別爲命令 – andho 2012-02-07 05:51:32

+1

@andho自己沒有測試過這個,但是我明白最近的NPM版本只是使用'npm install'。 – 2012-02-10 23:02:48

+11

現在已經測試和確認。我相信''npm install'取代了NPM 1.0以後的'npm bundle'。 – 2012-02-11 19:01:51

17

還有一些Node版本管理系統可以提供幫助。

退房殿https://github.com/isaacs/nave

NVM也可以使用https://github.com/creationix/nvm

還有一個叫ňhttps://github.com/visionmedia/n

+1

如果您只是想同時安裝不同版本的node.js和npm,則Nvm非常適用。其餘的我發現它已經足夠使用npm將需要的模塊安裝到項目目錄中。 – 2012-03-13 03:11:47

+1

如果您在查看'nvm'或'n'並且希望在更改目錄時自動切換,請查看'avn':https://github.com/wbyoung/avn – wbyoung 2015-05-11 21:53:46

7

bxjx的回答是概念準確。但是請注意,bundle命令不再需要一個目錄。它總是將包放入node_modules文件夾,以便npm知道以後在哪裏找到它們(並且可以避免重複安裝的依賴關係)。

任何解決方案可能會涉及到安裝NPM和殿「全系統」(也就是,在你的PATH,這可能是在某個地方~),但隨後只在虛擬環境中安裝的特定的相關

我回答得更徹底on the github issue

tl; dr:該用例是有效的和有幫助的,儘管它大部分在那裏,但它的效果並不盡如人意。我們應該確保思考並做對。

166

nodeenv - 爲node.js的(模擬virtualenv

+0

這看起來確實很棒,但我無法在node.js被編譯的同時通過nodeenv完成npm安裝(在osx Lion上)。也許我只是可以使用nvm install併爲每個nodeenv單獨安裝npm ...在我嘗試使用它的時候,我已經使用其他方法完成了多個節點版本。 – 2012-03-13 03:16:45

+2

可用於在現有Python虛擬環境中安裝_within_,以便在Python環境中激活'node.js'環境。 請參見['nodeenv -p'](https://github.com/ekalinin/nodeenv)。 – naitsirhc 2014-06-01 11:53:51

+2

nodeenv(實際上是virtualenv + nodeenv)也適用於魚貝殼用戶,因爲nave和其他人不支持除bash和zsh以外的任何其他shell。 – akarca 2014-10-30 09:39:24

1

你並不總是需要安裝依賴全球。通常這是推薦的,因爲你可以使用npm包提供的命令,但是如果你在本地安裝(在node_modules)目錄下,你也可以使用這些命令,它們只能在node_modules/.bin/目錄中,所以你必須鍵入node_modules/.bin/<command>,這很煩人,但你可以在這個路徑當然添加到您的PATH環境變量:

export PATH=node_modules/.bin:$PATH 

然後,你可以只輸入<command>和它的作品!

實際上,有一個返回到.bin目錄的絕對路徑的NPM命令:

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

此命令也可當你在項目中的子目錄的時候,它會返回第一個node_modules/.bin目錄找到在它的父目錄中。

您可以在.bashrc添加此別名自動.bin/目錄添加到您的PATH

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

所以,當你在具有在根目錄node_modules/一個項目的目錄,你可以鍵入​​,然後您可以使用.bin/目錄中的所有命令!

0

我認爲沒有安裝節點的節點環境工作沒有任何意義。這就像你想在python項目上工作時沒有安裝python和pip一樣!當然對於使用virtualenv和virtualenvwrapper,pre-require是python。
如果你想在一個Node項目上工作,至少安裝node和npm是非常正常的。
如果您只是想在Web上運行一個python項目(例如使用Django),則可以使用JavaScript文件的構建版本並將此文件加載到您的項目中。