为什么Node.js在node_modules中找不到模块?

时间:2015-09-08 18:30:25

标签: node.js npm

我正在努力让this AMQP example致力于OSX。我做了什么:

$ npm install amqplib
$ npm list
/Users/andrewendt/tmp/amqplib
└─┬ amqplib@0.3.2
  ├── bitsyntax@0.0.4
  ├── buffer-more-ints@0.0.2
  ├─┬ readable-stream@1.1.13
  │ ├── core-util-is@1.0.1
  │ ├── inherits@2.0.1
  │ ├── isarray@0.0.1
  │ └── string_decoder@0.10.31
  └── when@3.6.4

示例send.js以:

开头
var amqp = require('amqplib');
var when = require('when');

我收到此错误:

$ node send.js
module.js:338
    throw err;
          ^
Error: Cannot find module 'when'
    at Function.Module._resolveFilename (module.js:336:15)
    at Function.Module._load (module.js:278:25)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (/Users/andrewendt/tmp/amqplib/send.js:4:12)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)

注意:我可以require('amqplib');就好了。我可以使用交互式控制台重现这一点。

我完全难过了。为什么Node.js在 找到的东西的依赖项时找不到它?

3 个答案:

答案 0 :(得分:4)

节点没有那样工作。它正在查找when,因此它会查找脚本的当前工作目录,并遍历图表直到全局安装。在寻找when时,它不会查看您的某个依赖项,看看它是否存在机会。除此之外,如果你有不同版本的when的多个依赖项,它会使用哪一个呢?要使其正常工作,您需要在package.json中指定when并安装它才能使用它。

答案 1 :(得分:1)

请参阅docs on node modules

尝试查找模块when,节点从您当前的dir追加/node_modules到它的根目录。它不会在其他模块的依赖项中查找when模块。

答案 2 :(得分:0)

似乎“when”模块在项目文件夹中不可用。在项目文件夹中运行exports.update = function(req, res) { if(req.body._id) { delete req.body._id; } Thing.findById(req.params.id, function (err, thing) { if (err) { return handleError(res, err); } if(!thing) { return res.status(404).send('Not Found'); } var updated = _.merge(thing, req.body); updated.save(function (err) { if (err) { return handleError(res, err); } return res.status(200).json(thing); }); }); }; 。这应该可以解决问题。