Universa U8 module

U8 модуль позволяет запускать javascript код из отдельного модуля. Модуль обеспечивает гарантию неизменности кода и высокий уровень доверия к коду внутри модуля благодаря использованию подписи. U8 модуль представляет из себя упакованный пакет, подписанный специальным ключем. Модуль библиотеки Universa имеет стандартное расширение - .u8m .

Создание модуля

Рассмотрим создание U8 модуля на примере создания модуля jslib.u8m. С модулем jslib.u8m вы можете ознакомиться в проекте u8. Модуль jslib.u8m включает в себя все разработанные подсистемы и надстройки над u8, такие как: Node, UBotServer, DNS и так далее. На примере создания модуля u8 пользователь может создать свой собственный модуль, используя свою подсистему, название модуля и добавив в модуль необходимые ему ресурсы (файлы).

Для создания модуля jslib.u8m необходимо поместить каталоги /jslib и /u8scripts проекта u8 в zip архив и сменить разширение архива на .u8m.

Далее для создния U8 модуля необходимо к архиву добавить подпись. Для того чтобы подписать U8 модуль выполните следующую команду:

u8 —signmodule <module path> <key path>

Запуск модуля

Во время запуска U8 модуля, u8 выполняет проверку подписи модуля. Все необходимые модулю скрипты u8 ищет внутри модуля. А так же U8 имеет специальные методы для загрузки ресурсов (файлов) из модуля.

Для запуска кода из U8 модуля необходимо указать путь к скрипту внутри модуля. Например:

u8 ../jslib.zip/u8scripts/examples/testmain.js

Загрузка модуля

Для использования дополнительных модулей в u8 их необходимо загрузить. При загрузке модуля выполняется проверка его подписи и сопоставление её ключа с доверенными ключами из файла траста (~/.universa/u8trust.yaml). Модуль ядра u8core.u8m автоматически загружается при запуске u8, также загружается стартовый модуль, указанный в командой строке (см раздел Запуск модуля).

Загрузка выполняется функцией:

load(moduleName)
  • modulePath - путь к модулю

Импорт файлов модуля осуществляется функцией:

require(filePath, moduleName)
  • filePath - путь к файлу внутри модуля;
  • moduleName - имя модуля, определённое в фале манифеста модуля.

Use the code:

const io = require("io", "u8core");

Для загрузки файлов-ресурсов из модуля предусмотрены функции в io.js из u8core.u8m:

Функция для получения списка файлов:

getResourcesFromPath(path)
  • path - внутренний путь к директории или файлу в модуле.

Функция получения содержимого файла в виде строки:

resourceGetContentsAsString(path)
  • path - внутренний путь к директории или файлу в модуле.