跳到主要内容

Node Sidecar

NeoTavern 的后端是一个 Fastify 服务器,在桌面应用中它作为内嵌的 Node.js sidecar 运行:一个打包在外壳旁边的自包含 Node.js 24 二进制。

为什么用 sidecar

把后端打包为独立进程让外壳保持精简,让后端保持真实:

  • 后端是自托管安装运行的同一个 Fastify 5 应用, 因此桌面和服务器行为保持一致。
  • Node.js 和 SQLite 被编译进发行版,这就是首次运行不需要 npm install 和终端的原因。
  • 进程边界意味着后端的崩溃或挂起不会拖垮外壳的事件循环, 外壳可以强制执行生命周期保证。

启动

启动时外壳派生 sidecar 可执行文件,并在打开 webview 之前等待就绪。 后端:

  • 只在 127.0.0.1 上的一个随机空闲端口监听;
  • 在数据目录中创建 SQLite 数据库并运行待处理的 schema 迁移, 在待处理迁移前创建备份;
  • 服务生产 Web 资源和 API。

首次运行完全自动:数据目录、数据库、内置主题和起始角色都在没有任何用户 交互的情况下设置完成。

优雅关闭

关闭是协作的、有序的:

  1. 外壳接收关闭事件并告诉后端停止。
  2. 后端停止接受新连接,在其截止时间内完成进行中的工作, 并干净地关闭数据库。
  3. sidecar 退出,外壳退出。

意外的后端终止会被外壳检测到并报告为错误退出,绝不会留下一个静默孤立的 后端进程。因此应用在窗口关闭后绝不会留下游离的 neotavern-server 进程。

打包和验证

sidecar 按目标平台构建。原生插件(better-sqlite3、Sharp)和生产 Web 资源在同一个目标运行器上准备并随可执行文件打包;不支持在操作系统之间 移动准备好的资源。一个冒烟门在每个平台的 CI 中无头运行打包的 sidecar, 验证真实的 Node 可执行文件、SQLite、Sharp、打包的 SPA、诊断以及没有 遗留进程。

便携变体

Windows 便携版运行相同的 sidecar 布局:主可执行文件、sidecar 可执行文件、 一个 portable.flag 标记和一个 resources/ 文件夹。该标志把数据根切换 到应用旁边的本地 data/ 文件夹。外壳在把 Windows 资源路径交给打包的 Node 二进制之前会规范化它们。

格式和首次运行体验请参阅打包; 管理这个进程的外壳请参阅Tauri 外壳