2015-11-03 54 views
2

我安裝了nvm,並用它來升級nodenvm install 4.2.1。 我更新了.bashrc導出NODE_PATH=$HOME/.nvm/versions/node/v4.2.1/lib/node_modules設置NODE_PATH

我的目標是按照these instructions安裝hubot。安裝命令成功:npm install -g hubot coffee-script yo generator-hubot

但是安裝的命令無法找到自己的音樂庫:

$ yo hubot 
module.js:339 
    throw err; 
    ^

Error: Cannot find module 'os-tmpdir' 
    at Function.Module._resolveFilename (module.js:337:15) 
    at Function.Module._load (module.js:287:25) 
    at Module.require (module.js:366:17) 
    at require (module.js:385:17) 
    at Object.<anonymous> (/home/john/.nvm/versions/node/v4.2.1/lib/node_modules/yo/node_modules/configstore/node_modules/osenv/osenv.js:4:16) 
    at Module._compile (module.js:435:26) 
    at Object.Module._extensions..js (module.js:442:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:311:12) 
    at Module.require (module.js:366:17) 

當我安裝每個缺少的lib,它的發現。所以我結束了這種局面:

# We already have two copies of os-tmpdir, why isn't it found?? 
$ find /home/john/.nvm/ -name "*tmpdir*" 
/home/john/.nvm/versions/node/v4.2.1/lib/node_modules/generator-hubot/node_modules/os-tmpdir 
/home/john/.nvm/versions/node/v4.2.1/lib/node_modules/npm/node_modules/osenv/node_modules/os-tmpdir 

# Just install it again: 
$ npm install -g os-tmpdir 

# Now we have three copies! But it's being found. 
$ find /home/john/.nvm/ -name "*os-tmpdir*" 
/home/john/.nvm/versions/node/v4.2.1/lib/node_modules/generator-hubot/node_modules/os-tmpdir 
/home/john/.nvm/versions/node/v4.2.1/lib/node_modules/npm/node_modules/osenv/node_modules/os-tmpdir 
/home/john/.nvm/versions/node/v4.2.1/lib/node_modules/os-tmpdir 

爲什麼沒有爲節點模塊單node_modules?是否應該嵌套node_modules嵌套在node_modules嵌套在node_modules ...?

+0

它應該有'/用戶/肖恩/ .nvm /版本/節點/ V4.1.2/lib中/ node_modules /喲/ node_modules/configstore/node_modules/OS-tmpdir'安裝 – Sean

+0

是,這是節點的工作方式,但是在npm 3.0中,node_modules將被平鋪。這是一個好消息 – Sean

+0

@Sean,這聽起來確實是個好消息。你說它應該有,爲什麼不呢,對我來說呢?難道我做錯了什麼?爲什麼模塊以'〜/ .nvm/versions/node/v4.2.1/lib/node_modules /'結尾? –

回答

1

npm 3.0.0 release notes

你的依賴將現在可以安裝最大平坦。就 而言,您所有的依賴關係及其依賴關係以及它們的依賴關係將被安裝在您的項目的node_modules文件夾 中,且不會嵌套。 當兩個(或更多)模塊具有相互衝突的依存關係時,您只能看到嵌套在另一個下面的模塊 。

至於nvm ...我偶爾會遇到路徑問題。它做得相當不錯,但我必須像你一樣小小一點。過去的根本原因是npm的一個重大升級(就像這裏,如果這就是你所做的)或者一個糟糕的.npmrc文件(哎呀...)。典型的緩存清理,卸載 - 重新安裝的東西通常會爲我修復它。

在這種情況下,最初的安裝是在安裝nvm和升級節點之前完成的。這解決了這個問題:

$ npm uninstall -g hubot coffee-script yo generator-hubot 
$ npm install -g hubot coffee-script yo generator-hubot 
+0

將「typical ... stuff」擴展爲實際的命令;-)謝謝! –