Учебники для написания плагина для приложения nodejs?

Мне трудно найти хороший учебник по написанию плагинов для приложения nodejs (не для самого nodejs!).

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

Например, я использую карму-бегун для запуска модульных тестов JS, но существующие репортеры не очень хорошо отвечают нашим требованиям к журналированию. Поэтому я написал свой собственный репортер и поместил его в отдельный файл js, например, myreporter.js. Чтобы использовать его сейчас, я должен добавить myreporter.js в папку с кодом кармы и добавить такую ​​строку в reporter.js кармы:

exports.myreporter = require('./reporters/myreporter');

Это хорошо работает на моей машине, однако, это может быть проблемой для CI-сервера. Я не хочу включать весь код кармы в наш собственный проект. Я хочу установить карму из публичного репозитория на сервере и включить в наш проект только myreporter.js, чтобы нам не нужно было устанавливать измененную карму для каждой сборки. И я только хочу установить myreporter.js как плагин для кармы для сборок.

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

Я видел эту страницу о взаимозависимости. Означает ли это, что если я добавлю peerdependency или karma в файл package.json для myreporter.js, после того, как я установлю пакет myreporter и запустлю karma, karma подберет нового репортера?

Спасибо за любую помощь относительно этого длинного вопроса.

Обновления:

Пробовал взаимозависимость, кажется, карма 0.8.6 не поднимает мой плагин. Похоже, что начинается с 0,9 Карма использует ди, я думаю, это когда он начинает поддерживать плагины. Тем не менее, 0.9.3 все еще не является стабильной версией.

1 ответ

Нашел ответ сам. ВЕРОЯТНО нет способа написать плагин для обычного приложения nodejs, если само приложение явно не поддерживает плагины.

Тем не менее, очень легко изменить приложение для поддержки плагинов. Единственное, что нужно сделать, это использовать мощный "require", чтобы получить модуль плагина с его именем. Например, в Karma 0.9.4 (последняя версия на данный момент) он имеет plugin.js, который загружает все модули плагинов:

...
var requirePlugin = function(name) {
    log.debug('Loading plugin %s.', name);
    try {
      modules.push(require(name));  // Call require here!
    } catch (e) {
      if (e.code === 'MODULE_NOT_FOUND' && e.message.indexOf(name) !== -1) {
        log.warn('Cannot find plugin "%s".\n  Did you forget to install it ?\n' +
                 '  npm install %s --save-dev', name, name);
      } else {
        log.warn('Error during loading "%s" plugin:\n  %s', name, e.message);
      }
    }
  };

И все пользовательские плагины могут быть установлены в файле conf.js следующим образом:

...
plugins: ['you-own-plugin'],
...

Чтобы написать свои собственные плагины, взгляните на карму Github, есть много примеров плагинов для кармы.

К сожалению, последняя стабильная версия Karma (0.8.6) не поддерживает внешние плагины. Мне пришлось самому изменять preprocessor.js и reporter.js для поддержки пользовательских препроцессоров и репортеров. Я предоставляю изменения ниже, это простое изменение, но не очень рекомендуется.

//preprocessor.js line 26
processor = exports[processorName] || require(processorName.toLowerCase())

//reporter.js line 48
var Reporter = exports[helper.ucFirst(name) + (config.colors ? 'Color' : '')] || require(name.toLowerCase());
Другие вопросы по тегам