设置NODE_PATH

时间:2015-11-03 12:56:17

标签: node.js npm

我安装了nvm,并用它来升级nodenvm install 4.2.1。 我更新了.bashrc以导出NODE_PATH=$HOME/.nvm/versions/node/v4.2.1/lib/node_modules

我的目标是按照these instructions安装hubot。 install命令成功: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

1 个答案:

答案 0 :(得分:1)

来自npm 3.0.0 release notes

  

您的依赖项现在将最大程度地安装。就目前而言   可能的,所有依赖项,它们的依赖项,以及它们   依赖项将安装在项目的node_modules文件夹中   没有嵌套。 您只能看到彼此嵌套的模块   当两个(或更多)模块具有冲突的依赖关系时。

至于nvm ......我偶尔会遇到路径问题。它做得很好,但我不得不像你那样摆弄一点。我过去的根本原因是npm的一次重大升级(就像这里,如果这就是你所做的)或一个糟糕的.npmrc文件(哎呀...)。典型的缓存清理,卸载重新安装通常会为我修复它。

在这种情况下,初始安装是在安装nvm和升级节点之前完成的。这解决了这个问题: