需要节点模块中另一个依赖项的依赖项

时间:2012-03-16 11:35:16

标签: node.js mongoose npm node-modules

我有一个简单的节点应用程序,它对github上的另一个应用程序具有单一依赖性。依赖项与npm install安装得很好,但是当我尝试在那里安装某些东西时,它说它不可用。例如,github应用程序将Mongoose安装为依赖项。我认为这个父应用程序可以访问该模块,因为它在一个孩子:

var mongoose = require('mongoose')

结构看起来像这样:

/app
  /node_modules
    /github_dependency [parent module]
      /node_modules
        /mongoose [child module]

我是否只需要在父应用程序中包含mongoose作为依赖项,或者是否有办法通过子进程访问该模块?

2 个答案:

答案 0 :(得分:32)

  

我是否只需要在父应用程序中包含mongoose作为依赖项,或者是否有办法通过子进程访问该模块?

虽然可能可供您使用,例如 require('github/node_modules/mongoose'),标准做法是明确安装所有依赖项(即,应该包括mongoose作为应用程序的依赖项)和require('mongoose')

答案 1 :(得分:4)

对于更稳健的情况,这在测试等情况下很好,您可以使用以下功能:

var Module = require('module');
var path = require('path');

function requireFrom(self, parent, name) {
  var pPath = Module._resolveFilename(parent, self);
  var m = new Module(pPath, module);
  m.filename = pPath;
  m.paths = Module._nodeModulePaths(path.dirname(pPath));
  return m.require(name);
}

可以按如下方式使用

requireFrom(module, 'github_dependency', 'mongoose')