web-dev-qa-db-ja.com

ノードモジュールで別の依存関係の依存関係を要求する

Github上の別のアプリに単一の依存関係を持つ単純なノードアプリがあります。依存関係はnpm installで問題なくインストールされますが、そこに何かをインストールするように要求しようとすると、それは利用できないと表示されます。たとえば、githubアプリは依存関係としてMongooseをインストールします。この親アプリは子であるため、そのモジュールにアクセスできると思いました。

var mongoose = require('mongoose')

構造は次のようになります。

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

親アプリにも依存関係としてマングースを含める必要がありますか、それとも子経由でそのモジュールにアクセスする方法はありますか?

29
typeoneerror

親アプリにも依存関係としてマングースを含める必要がありますか、それとも子経由でそのモジュールにアクセスする方法はありますか?

それは可能性がありますあなたが例えばするために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')
5
forivall