我有一个简单的节点应用程序,它对github上的另一个应用程序具有单一依赖性。依赖项与npm install
安装得很好,但是当我尝试在那里安装某些东西时,它说它不可用。例如,github应用程序将Mongoose安装为依赖项。我认为这个父应用程序可以访问该模块,因为它在一个孩子:
var mongoose = require('mongoose')
结构看起来像这样:
/app
/node_modules
/github_dependency [parent module]
/node_modules
/mongoose [child module]
我是否只需要在父应用程序中包含mongoose作为依赖项,或者是否有办法通过子进程访问该模块?
答案 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')