Skip to content

Совместимость

Это руководство предназначено для авторов плагинов, у которых уже есть нативный проект Tauri и которые хотят, чтобы один и тот же код одновременно поддерживал:

  • публикацию как самостоятельного desktop‑приложения
  • публикацию как плагина OTools

Рекомендуемый подход — не поддерживать два frontend‑проекта. Лучше сохранить один Web‑проект и добавить совместимость на уровне сборки и runtime.

1. Оставить frontend в стандартном стиле Tauri

Следуя подходу otools-plugin-sdk, frontend может продолжать использовать официальные API Tauri:

ts
import { invoke } from "@tauri-apps/api/core";
import { listen } from "@tauri-apps/api/event";

После этого подключите слой совместимости на уровне Vite:

ts
import { defineConfig } from "vite";
import { otoolsTauriShimPlugin } from "otools-plugin-sdk/vite";

export default defineConfig({
  plugins: [otoolsTauriShimPlugin()],
});

Плюсы такого подхода:

  • standalone‑версия по‑прежнему использует стандартные возможности Tauri
  • при сборке плагина внутренняя реализация invoke / listen автоматически подменяется
  • в бизнес‑коде не нужно поддерживать отдельные API‑вызовы для standalone и plugin режимов

Если код напрямую обращается к window.otools, достаточно добавить объявление типов:

ts
/// <reference types="otools-plugin-sdk" />

Для открытия путей, браузера и выбора файлов лучше использовать совместимые обёртки SDK, а не жёстко привязываться к одному runtime:

ts
import {
  isOtoolsPluginRuntime,
  openExternal,
  openPath,
  pickDirectory,
  pickFile,
  saveFile,
} from "otools-plugin-sdk";

2. Разделить native‑возможности на «общее ядро + две оболочки»

Если в исходном проекте Tauri уже есть команды в src-tauri, рекомендуется вынести бизнес‑логику в общий Rust crate и затем использовать его из:

  • слоя команд Tauri standalone‑версии
  • слоя динамической библиотеки native/ для плагина OTools

Более устойчивая структура проекта может выглядеть так:

text
project-root/
  src/                 # общий frontend
  src-tauri/           # standalone Tauri shell
  native/              # native shell плагина OTools
  crates/app-core/     # общее Rust‑ядро
  plugin.json          # манифест плагина OTools
  vite.config.ts

Рекомендуемое разделение ответственности:

  • src/ отвечает только за UI и вызовы invoke / listen
  • crates/app-core/ содержит настоящую бизнес‑логику
  • src-tauri/ отвечает за desktop‑окна, меню, tray и регистрацию команд Tauri
  • native/ экспортирует интерфейсы динамической библиотеки, которые нужны OTools

Такой подход помогает не дублировать Rust‑логику в двух местах.

3. Конфигурации и артефакты могут сосуществовать

Исходную конфигурацию Tauri можно сохранить без изменений, например:

  • src-tauri/tauri.conf.json
  • Cargo.toml

Чтобы поддержать публикацию плагина OTools, дополнительно понадобятся:

  • plugin.json в корне проекта
  • logo.png
  • артефакты сборки в lib/ или native/, если нужны native‑возможности

Оба набора конфигурации могут существовать параллельно без конфликта:

  • standalone‑версия выпускается через tauri build
  • plugin‑версия следует потоку упаковки OTools

Обычно frontend может использовать один и тот же dist/, а отличается только среда хоста.

4. Рекомендуемые границы совместимости

Лучше всего сначала адаптировать:

  • invoke
  • listen
  • файловые диалоги
  • открытие пути / внешней ссылки

Менее подходящие возможности для прямого переноса:

  • управление несколькими окнами
  • системный tray
  • автозапуск
  • updater
  • логика, жёстко завязанная на жизненный цикл desktop‑окон

Такие возможности лучше собрать в отдельный слой runtime‑адаптации, а не разносить по бизнес‑страницам.

5. Практичный путь миграции

  1. Оставить существующую структуру src/ + src-tauri/ без изменений, чтобы standalone‑версия продолжала работать.
  2. Подключить otools-plugin-sdk во frontend и унифицировать invoke / listen через слой совместимости.
  3. Вынести Rust‑логику в общий crate, чтобы избежать дублирования между Tauri и plugin native.
  4. Добавить plugin.json в корень и заполнить метаданные, необходимые для плагинов OTools.
  5. В конце обработать сильно зависящие от хоста возможности: окна, tray, автозапуск и т.п.

OTools океанская экосистема · Высокопроизводительная платформа AI‑workflow