2012-02-03 93 views
13

我已經安裝了NVM使用這個職位說明書的node.js:節點版本管理器(NVM)NPM安裝模塊共同文件夾

http://www.backdrifter.com/2011/02/18/using-nvm-and-npm-to-manage-node-js/

當我和節點版本之間切換,然後使用NPM要安裝模塊,所有模塊都放置在同一個'node_modules'文件夾(〜/ node_modules /)中,而不是放置在特定於該版本節點的'node_modules'目錄中?

有關如何解決此問題的任何想法?

回答

29

基於從https://github.com/creationix/nvm/pull/97評論:

當-g的 包在正確的目錄結束使用全局開關與故宮安裝包(即 .nvm/$ VERSION/lib中/ node_modules) ,但節點無法要求它 ,因爲它以某種方式不搜索它的前綴。

因此,使用npm install -g xxxxx將把模塊在NVM正確的位置,但如果你試圖節點其中require一個找不到模塊。我仍然在玩這個,如果我找到解決方案,將會更新。

更新

哪裏NPM把node_modules? (請參見https://docs.npmjs.com/files/folders

  • 本地安裝(默認):將東西放入當前軟件包根目錄的./node_modules中。
  • 全局安裝(使用-g):將內容放入/ usr/local或安裝節點的任何位置。
  • 本地安裝,如果你要去require()它。
  • 如果要在命令行上運行它,請全局安裝它。
  • 如果您需要兩者,請在兩處安裝,或使用npm link

所以我所做的是在我的項目root dir中運行npm init(參見http://npmjs.org/doc/init.html),它生成了package.json。現在,當我運行npm install xxxxx時,它會在我的項目文件夾(我添加到我的.gitignore中)中創建一個node_modules目錄。這適用於我在我的代碼中需要的模塊。

對於像CoffeeScript這樣的命令,我使用npm install -g coffee-script進行安裝,將其放入正確的目錄(.nvm/$ VERSION/lib/node_modules)中。雖然我不能要求這些模塊(npm鏈接應該解決這個問題),但我可以運行這些命令 - 即coffee

+0

最後一個很好的答案,一直在我的頭上敲了一下。 – 2015-01-26 19:51:50

1

我剛剛在全球安裝了快遞(-g),並且在需要(「快遞」)時出現問題。就像Je​​sse Vogt說的,我只是重新安裝了express,但是這次沒有-g就像這樣:「sudo npm install express」,現在正在完美運行!

+0

你能解釋一下爲什麼有效嗎? – 2015-02-18 21:50:00

+0

說實話,我不知道,我非常喜歡這個。然而,在Jesse離開的網上衝浪(https://docs.npmjs。我發現以下內容: 「如果您想使用類似於Node的要求的方式從您自己的模塊中獲取軟件包,那麼您希望在本地進行安裝......」 我不太瞭解它的區別,但是肯定的是,如果您需要使用require()來運行服務器,則應在本地進行安裝(不帶-g),因爲這對我很有用。 – 2015-02-19 00:36:30

+0

謝謝你闡述:) – 2015-02-19 01:03:39