Github上の別のアプリに単一の依存関係を持つ単純なノードアプリがあります。依存関係はnpm install
で問題なくインストールされますが、そこに何かをインストールするように要求しようとすると、それは利用できないと表示されます。たとえば、githubアプリは依存関係としてMongooseをインストールします。この親アプリは子であるため、そのモジュールにアクセスできると思いました。
var mongoose = require('mongoose')
構造は次のようになります。
/app
/node_modules
/github_dependency [parent module]
/node_modules
/mongoose [child module]
親アプリにも依存関係としてマングースを含める必要がありますか、それとも子経由でそのモジュールにアクセスする方法はありますか?
親アプリにも依存関係としてマングースを含める必要がありますか、それとも子経由でそのモジュールにアクセスする方法はありますか?
それは可能性がありますあなたが例えばするためにrequire('github/node_modules/mongoose')
、標準的な方法では、すべての依存関係を明示的にインストールし(つまり、アプリの依存関係としてマングースを含める必要があります)、require('mongoose')
をインストールします。
テストなどの状況に適した、より堅牢なケースの場合は、次の関数を使用できます。
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')