Совместное использование экземпляра Mongoose между несколькими пакетами NPM

В попытке модулировать большой существующий Node + Express + Mongoose приложение в несколько монтируемых приложений, каждое из которых разработано как отдельный пакет NPM, нам интересно, будет ли общий доступ к одному Мангустский экземпляр между ними хорошая идея?

Допустим, у нас есть набор пакетов NPM, каждый из которых содержит клиентские ресурсы, Модели Mongoose и REST-API, реализованные с помощью Express. Они делятся несколько общих черт, но по сути должны рассматриваться как отдельные многоразовые артефакты. Хост-приложение, также основанное на Express, монтирует эти под различными корневыми URI:

var discussions = require('discussions'),
    tickets     = require('tickets'),
    events      = require('events'),
    express     = require('express'),
    app         = express();

var environment = { ...see below... };

...

app.use('/events-api', events(environment));
app.use('/tickets-api', tickets(environment));
app.use('/discussions-api', discussions(environment));

Теперь, так какevents, tickets а такжеdiscussions приложения (отдельные пакеты NPM вытащил через хозяинаpackage.json) используйте мангуст, как и само приложение хоста, мы решили передать экземпляр Mongoose хосту через какой-тоenvironment объект, который также включает в себя другие материал, которым хост хочет поделиться с подключенными приложениями.

Видите ли вы какие-либо очевидные недостатки этого подхода? Монтируемые приложения в этом случае будетnot указать Mongoose как зависимость в их соответственныйpackage.jsonи они будутnot require('mongoose') как обычно, но вместо этого получите экземпляр Mongoose от хоста который отвечает за подключение его к MongoDB.

Если это плохая идея, и вы предлагаете каждому подпапу объявить зависимость в сторону Mongoose, каждый пакет NPM получит свой копия Mongoose и каждый должен был бы подключиться к MongoDB, верно?

Некоторая справочная информация:

We really do want to include the apps in a host application, running in a single process, rather that having multiple Node instances. The host contains middleware for authentication and other things. We do want to have the apps as separately developed NPM packages included as versioned dependencies of the various host applications that we build, rather than just copying their source to a host application. We realize that reusing the same Mongoose instance between multiple mounted apps will have them share the same model namespace.

Edit: Чтобы уточнить структуру пакета после того, как все былоnpm installизд:

host/
  assets/
  models/
  routes/
  node_modules/
    express/ ...
    mongoose/ ...
    events/
      assets/ ...
      models/ ...
      routes/ ...
    tickets/
      assets/ ...
      models/ ...
      routes/ ...
    discussions/
      assets/ ...
      models/ ...
      routes/ ...

Этоevents, tickets, а такжеdiscussions приложения не включают Mongoose (или Express) свои, но рассчитаны на постоянное присутствие хост-приложение, которое предоставляет эти зависимости.

Мы предполагаем, что пакет NPM, такой какtickets не может просто require вещи от родителей, верно?

Ответы на вопрос(3)

Ваш ответ на вопрос