35

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

var mongoose = require('mongoose')

结构看起来像这样:

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

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

4

2 回答 2

33

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

虽然您可以使用例如.require('github/node_modules/mongoose')require('mongoose')

于 2012-03-16T11:39:40.797 回答
6

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

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')
于 2017-10-30T22:17:15.380 回答