Модули и зависимости
Ru | En
Модуль в Drakon.Tech может вызывать функции из других модулей и библиотек. Внешний объект, который модуль может использовать, называется зависимостью.
Как добавить зависимости в модуль
- Щёлкните правой кнопкой мыши на модуле и выберите "Свойства".
- Щёлкните на кнопке "Зависимости".
- Введите зависимости, на каждой строке по одной. Каждая зависимость превратится в глобальный объект, видимый во всех функциях модуля.
Пример: создадим три модуля, mod1, mod2, и mod3.
- mod1 будет зависеть от модулей mod2 и mod3.
- mod3 будет зависеть от mod1 (да, циклические зависимости — это нормально).
В зависимостях модуля mod1, мы пишем:
foo bar
В зависимостях модуля mod3, мы пишем:
moo
Обратите внимание, что имена зависимостей не совпадают с именами модулей. Они могут совпадать, но это не требуется. Модуль не знает, от каких именно модулей он зависит. Только приложение, которое использует модули, знает, как модули будут соединены между собой.
Модуль mod1 знает только то, что есть два глобальных объекта, foo и bar.
Вот так мы использвуем зависимости внутри модуля mod1:
foo.someFunctionFromMod2(); bar.someFunctionFromMod3();
Как привязать зависимости к модулям
- Создайте приложение.
- Перейдите на вкладку "Модули" и добавьте все необходимые модули. Имейте в виду, что разные приложения могут повторно использовать один модуль.
- Назначьте зависимостям модули.
- Выберите стартовый модуль. В стартовом модуле должна быть экспортированная функция с именем main.
Данное приложение сгенерирует примерно такой код:
var instanceOfMod1 = mod1(); // Создаём экземпляр mod1 var instanceOfMod2 = mod2(); // Создаём экземпляр mod2 var instanceOfMod3 = mod3(); // Создаём экземпляр mod3 instanceOfMod1.foo = instanceOfMod2; // Связываем зависимость foo с mod2 instanceOfMod1.bar = instanceOfMod3; // Связываем зависимость bar с mod3 instanceOfMod3.moo = instanceOfMod1; // Связываем зависимость moo с mod1 instanceOfMod1.main(); // Запускаем приложение. Функция main() должна быть определана в mod1. // В функции main() должен быть установлен флаг "export".
Назначение приложений — генерировать такой связующий код. Это инструмент внедрения зависимостей (dependency injection).
Приложения позволяют запускать модули прямо в браузере и наслаждаться всеми благами отладки в Инструментах разработчика.
С другой стороны, можно скачать модули как JavaScript-файлы и включить их в проект без приложения.
Другая возможность — добавить ссылку на JavaScript-файл непосредственно в HTML во время разработки и отладки.
Как использовать зависимости в приложениях на NodeJS
Так как модуль не знает, на что указывают его зависимости, мы можем соединить зависимости с чем угодно. Например, мы можем связать зависимости с модулями npm или другими модулями, которые были созданы вне Drakon.Tech.
В этом примере модуль helloexpress использует фреймворк Express.
В нашем приложении NodeJS:
const express = require('express'); const app = express(); const helloexpress = require('./helloexpress'); // Включаем helloexpress const hello = helloexpress(); // Создаём экземпляр модуля helloexpress hello.app = app; // Чтобы это работало, в модуле helloexpress должна быть зависимость "app". hello.startServer(); // Предполагается, что в helloexpress есть экспортированная функция startServer()
Внутри helloexpress теперь есть глобальный объект app, указывающий на Express.