Модули
Создание и установка публикуемых библиотечных пакетов Fusion
Overview
Модули Fusion — это публикуемые библиотечные пакеты, а не плагины маршрутов. Вы пишете обычный пакет (Python, TypeScript или Rust), публикуете его на GitHub и устанавливаете в приложение Fusion через CLI. После этого импортируете его как любую другую зависимость.
flowchart LR
init["fusion module init"] --> pkg["Репозиторий пакета"]
pkg --> gh["GitHub"]
gh --> add["fusion add --github"]
add --> app["Приложение Fusion"]
app --> import["import пакета"]Рекомендуемое именование
Именование рекомендуется, но не обязательно. Его можно переопределить в fusion.module.toml.
| Host | Шаблон | Пример (--name jwt) |
|---|---|---|
| Python | fusion_<name>_mod | fusion_jwt_mod → from fusion_jwt_mod import ... |
| npm / TypeScript | fusion-<name>-mod | fusion-jwt-mod → import { ... } from "fusion-jwt-mod" |
Репозиторий / папка по умолчанию: fusion-<name>-mod.
Создание модуля
fusion module initВ интерактивном режиме CLI спросит:
- Язык реализации — Python, TypeScript или Rust
- Имя модуля (id)
- Описание
- Выходную директорию (по умолчанию
fusion-<id>-mod)
Неинтерактивно:
fusion module init --lang python --name example --description "My first module"
fusion module init --lang rust --name auth --description "Auth helpers" ./fusion-auth-modЯзыки
| Язык | Результат |
|---|---|
| Python | Чистый Python-пакет в python/fusion_<name>_mod/ |
| TypeScript | npm-пакет с js/ и src/ |
| Rust | Общее Rust-ядро + опциональные биндинги PyO3 и N-API для Python и TypeScript |
Rust удобен, когда нужно одно native-ядро для всех host-языков.
Структура scaffold (Python)
fusion-example-mod/
├── fusion.module.toml
├── pyproject.toml
├── README.md
└── python/
└── fusion_example_mod/
├── __init__.py
└── hello.pyВ scaffold есть пример hello(). Замените его своим API.
Manifest
У каждого модуля есть fusion.module.toml:
[module]
id = "example"
name = "example"
version = "0.1.0"
description = "My first module"
[module.impl]
language = "python"
[module.targets]
python = true
typescript = false
[module.entry]
python = "fusion_example_mod"
[module.build]
python = "pip install -e ."entry— имя пакета для import (или npm-имя для TypeScript)build— команды, которыеfusion addзапускает после загрузкиtargets— какие host-языки поддерживает модуль
Публикация
- Реализуйте пакет
- Запушьте на GitHub
- В приложении Fusion выполните
fusion add
Установка в приложение
Запускайте из проекта с fusion-framework.toml:
fusion add --github OWNER/fusion-example-mod
fusion add --github OWNER/fusion-example-mod@v1.0.0
fusion add --github https://github.com/OWNER/fusion-example-modCLI делает следующее:
- Скачивает репозиторий
- Проверяет
fusion.module.toml - Кладёт пакет в
.fusion/modules/<id>/ - Запускает build / install (
pip install -e .,maturinилиnpm) - Записывает модуль в
fusion-framework.tomlв[[modules]] - Для TypeScript-host также линкует пакет в
package.json
Использование в приложении
Python:
from fusion_example_mod import hello
print(hello("world"))TypeScript:
import { hello } from "fusion-example-mod";
console.log(hello("world"));Вызывайте функции из маршрутов, сервисов или любого другого места — модули это обычные библиотеки.