@rynt/extension-build
v0.9.1
Published
Vite preset, host-shims and .ryntextension packer for Rynt Launcher extensions
Readme
@rynt/extension-build
Пресет Vite и утилиты упаковки для авторов расширений Rynt Launcher: ESM-бандл, host-shim’ы на vue и @rynt/sdk/*, манифест в dist/, архив .ryntextension.
Документация: https://docs.rynt.space
SDK: @rynt/sdk
Создать проект: @rynt/create-extension
Установка
npm install -D @rynt/extension-build @rynt/sdk vite vue @vitejs/plugin-vue typescript vue-tscРекомендуется начать с шаблона:
npm create @rynt/extension@latest my-extensionБыстрый старт
vite.config.ts
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import { ryntExtensionViteConfig } from '@rynt/extension-build';
const root = path.dirname(fileURLToPath(import.meta.url));
export default ryntExtensionViteConfig({
root,
manifest: {
id: '@acme/my-extension',
name: 'My Extension',
description: 'Краткое описание',
icon: './assets/icon.png',
author: 'Your Name',
main: 'index.js',
engines: { rynt: '>=0.9.0' },
extensionApi: '1',
},
});Отдельный manifest.json в корне не нужен: после vite build лаунчер читает dist/manifest.json.
Entry src/index.ts
import { defineRyntExtension } from '@rynt/sdk/extension';
export default defineRyntExtension((ctx) => {
// регистрация страниц, меню, реестров…
});Скрипты в package.json
{
"scripts": {
"build": "vite build && rynt-extension-pack",
"dev": "vite build --watch",
"typecheck": "vue-tsc -p tsconfig.json --noEmit"
}
}| Команда | Результат |
|---------|-----------|
| pnpm dev | watch-сборка + Extension Dev Bridge (hot reload в лаунчере) |
| pnpm build | dist/ + файл {id-slug}-{version}.ryntextension |
Иконка
В manifest.icon укажите локальный путь (PNG, JPG, WebP, SVG):
icon: './assets/icon.png',При сборке растровая иконка масштабируется до 512×512 и попадает в dist/icon.png. SVG копируется как dist/icon.svg. URL и data: URI не изменяются.
Host-shim’ы
Расширение не тащит свой vue и не дублирует SDK: bare-импорты
vue, vue-router, @rynt/sdk, @rynt/sdk/extension, …
подменяются на шимы, которые берут модули с globalThis.__RYNT_EXTENSION_HOST_MODULES__ в рантайме лаунчера.
В коде расширения вызывайте привычные API (usePageRegistry().register, defineRyntExtension, импорт UI из @rynt/sdk) — extensionId для записей в реестр подставляется автоматически из manifest.id в Vite-конфиге.
Подробнее: модель реестров.
Dev-режим (Extension Dev Bridge)
- В лаунчере: Управление расширениями → включить dev-hub (
127.0.0.1:39217). - В каталоге расширения:
pnpm dev. - После каждой пересборки расширение перерегистрируется в лаунчере.
| Переменная | Описание |
|------------|----------|
| RYNT_DEV=1 | явно включить bridge |
| RYNT_DEV_BRIDGE=0 | отключить |
| RYNT_LAUNCHER_DEV_HUB | URL hub (по умолчанию http://127.0.0.1:39217) |
Dev-версия с тем же manifest.id перекрывает установленную с диска.
CLI rynt-extension-pack
Упаковывает содержимое dist/ в .ryntextension (zip):
- читает
dist/manifest.json; - имя файла:
{slug}-{version}.ryntextension, slug изmanifest.id.
Вызывается в скрипте build после vite build.
TipTap в расширениях
| Импорт | Поведение |
|--------|-----------|
| @tiptap/core | host-shim (один экземпляр с лаунчером) |
| @tiptap/extension-* | в dependencies расширения, собирается в бандл |
