Требовать зависимости другой зависимости в узловых модулях - PullRequest
29 голосов
/ 16 марта 2012

У меня есть простое приложение для узлов, которое имеет одну зависимость от другого приложения на github.Зависимость устанавливается просто с npm install, но когда я пытаюсь установить что-то там, он говорит, что он недоступен.Например, приложение github устанавливает Mongoose как зависимость.Я думал, что это родительское приложение сможет получить доступ к этому модулю, так как он находится в дочернем:

var mongoose = require('mongoose')

Структура выглядит примерно так:

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

Должен ли я простовключить mongoose в качестве зависимости, а также в родительское приложение или есть способ получить доступ к этому модулю через дочерний элемент?

Ответы [ 2 ]

32 голосов
/ 16 марта 2012

Должен ли я просто включить mongoose в качестве зависимости в родительское приложение или есть способ получить доступ к этому модулю через ребенка?

Хотя это возможно для вас, например. require('github/node_modules/mongoose'), стандартная практика заключается в явной установке всех ваших зависимостей (то есть вы должны включить mongoose в качестве зависимости вашего приложения) и require('mongoose').

5 голосов
/ 31 октября 2017

Для более надежного случая, который хорош в таких ситуациях, как тестирование, вы можете использовать следующую функцию:

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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...