本文档概述了 Joplin 的系统架构,解释了核心组件的组织方式以及它们在不同平台上的交互方式。它涵盖了驱动 Joplin 的桌面、移动、CLI 应用程序和服务器组件的基础结构。
有关同步等特定功能的信息,请参阅 同步引擎。有关数据模型详情,请参阅 数据模型。
Joplin 被构建为一个多平台应用程序,具有共享的核心业务逻辑和特定于平台的 UI 实现。该应用程序遵循分层架构模式。
来源:packages/lib/BaseApplication.ts39-69 packages/lib/package.json42-106 packages/app-desktop/app.ts1-18 packages/app-mobile/root.tsx1-35
Joplin 的架构以 BaseApplication 类为中心,它为所有应用程序变体提供了基础。然后,每个平台都用特定于平台的功能对其进行扩展。
应用程序生命周期遵循以下主要步骤
来源:packages/lib/BaseApplication.ts84-757 packages/app-desktop/app.ts73-743 packages/app-desktop/ElectronAppWrapper.ts49-622
Joplin 使用 Redux 进行状态管理,并结合使用各种 reducer 来处理应用程序状态的不同方面。
来源:packages/lib/reducer.ts1-67 packages/app-desktop/app.reducer.ts packages/app-desktop/gui/Sidebar/Sidebar.tsx15-26
Joplin 在所有平台上都使用 SQLite 进行数据存储,并具有一致的模型结构。
数据模型遵循以下关键模式
BaseModel,它提供了 CRUD 操作JoplinDatabase 与数据库交互来源:packages/lib/BaseModel.ts packages/lib/models/Setting.ts151-185 packages/lib/reducer.ts70-182
Joplin 的同步系统能够通过各种同步目标在多个设备之间同步数据。
同步过程包括
来源:packages/lib/BaseApplication.ts475-544 packages/app-mobile/root.tsx94-102 packages/app-desktop/gui/Sidebar/Sidebar.tsx55-58
Joplin 在多个平台上实现,具有共享的核心逻辑和特定于平台的界面。
每个平台实现
@joplin/lib)来源:package.json4-6 packages/app-desktop/package.json2-11 packages/app-mobile/package.json2-5 packages/app-cli/package.json2-5 packages/lib/package.json2-6
设置系统跨所有平台管理应用程序配置,支持不同的存储位置和配置文件。
设置系统的关键方面
Setting 类进行集中配置来源: packages/lib/models/Setting.ts151-1218 packages/lib/models/settings/FileHandler.ts1-7 packages/lib/services/profileConfig/mergeGlobalAndLocalSettings.ts1-6
Joplin 支持一个强大的插件系统,允许扩展其功能。
插件系统提供:
来源: packages/app-desktop/app.ts4-7 packages/app-desktop/services/plugins/PluginRunner.js
Joplin Server 提供同步、共享和协作功能。
Joplin Server 的功能:
来源: packages/server/package.json2-86
启动顺序是理解 Joplin 如何初始化其组件的关键部分。
启动包含以下关键步骤:
来源: packages/lib/BaseApplication.ts241-319 packages/app-desktop/main.js1-44 packages/lib/utils/processStartFlags.ts20-27
Joplin 支持同时运行多个实例,每个实例都有自己的配置文件。
多实例功能:
来源: packages/app-desktop/ElectronAppWrapper.ts73-76 packages/app-desktop/commands/openPrimaryAppInstance.ts1-3 packages/app-desktop/commands/openSecondaryAppInstance.ts1-3 readme/apps/multiple_instances.md1-3
Joplin 的架构遵循以下关键原则:
这种架构允许 Joplin 在保持跨平台一致体验的同时,在适当的地方利用特定平台的强大功能。