Создание системы плагинов для платформы MVC на основе nodejs

Я хотел бы иметь возможность создавать функциональные возможности для моего приложения в системе стиля плагина по нескольким причинам:

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

Я не уверен, как это реализовать. Я хотел бы иметь папку plugins для размещения их отдельно, но я думаю, что мои вопросы:

  • Как плагины взаимодействуют с основной системой?
  • Как работает структура папок? Каждый из них будет содержать стандартную структуру MVC: контроллеры, службы, модели, представления и т.д.?

Я предполагаю, что у кого-нибудь есть учебник или какая-то документация, связанная с этой техникой, которая была бы полезна. Я немного поработал, но все это слишком тесно связано с фактическим кодом, с которым они работают, а не с концепцией, и я не нашел ничего, что специально связано с nodejs.

Ответ 1

Я предлагаю подход, аналогичный тому, что я сделал в проекте uptime (https://github.com/fzaninotto/uptime/blob/master/app.js#L46):

  • запускает события приложения в критических частях вашего приложения.
  • добавьте раздел 'plugins' в конфигурацию приложения
  • каждое имя плагина должно быть именем пакета. Пакеты плагинов должны возвращать либо обратный вызов, либо объект с функцией init().
  • в любом случае, вставляйте плагинам объекты, которые они должны будут запускать (конфигурация, соединения и т.д.) при вызове init() или выполнении обратного вызова. Модули плагинов
  • регистрируют прослушиватели событий приложения и изменяют его.

Преимущества:

  • легкий
  • полагаться на npm для зависимостей
  • не извлекайте колесо

Ответ 2

Создайте прототип плагина для базы функциональность, и пусть пользователь определяет свой плагин в модуле. в модуль, пользователь наследует объект от прототипа, расширяет его функциональности, а затем экспортировать конструктор, который возвращает плагин объект.

Основная система загружает все плагины по требованию ( "pluginname" ) и для каждый вызывает конструктор.