2015-11-03 43 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”扩展为实际的命令;-)谢谢! –