本文档介绍了 Joplin 仓库、其架构和关键组件。Joplin 是一款开源的笔记应用程序,支持包括桌面、移动和命令行界面在内的多个平台。其代码库被组织成一个包含多个包的单体仓库,这些包协同工作,提供无缝的笔记体验,并具有同步、端到端加密和 Markdown 渲染等功能。
有关系统特定方面的更详细信息,请参阅此 Wiki 中的其他部分,例如 核心组件、客户端应用程序 或 服务器组件。
Joplin 使用 Yarn workspaces 构建为单体仓库,其中包含多个共享核心功能的包。其架构遵循模块化方法,在核心业务逻辑、平台特定实现和服务之间进行了清晰的划分。
来源:package.json1-121 packages/app-desktop/package.json1-211 packages/app-mobile/package.json1-152 packages/server/package.json1-86 packages/lib/package.json1-108 packages/renderer/package.json1-58
该仓库组织成多个包,每个包负责应用程序的特定方面
| 包 | 描述 |
|---|---|
| @joplin/lib | 核心业务逻辑、模型和服务 |
| @joplin/renderer | Markdown 渲染引擎 |
| @joplin/utils | 常用工具函数 |
| @joplin/app-desktop | 基于 Electron 的桌面应用程序 |
| @joplin/app-mobile | React Native 移动应用程序 |
| @joplin/app-cli | 命令行界面 |
| @joplin/server | Joplin 同步服务器实现 |
| @joplin/tools | 开发和构建工具 |
来源:package.json1-121 packages/app-desktop/package.json1-211 packages/app-mobile/package.json1-152 packages/server/package.json1-86 packages/lib/package.json1-108 packages/renderer/package.json1-58 packages/tools/package.json1-71
Joplin 的核心功能实现在 @joplin/lib 包中,它提供了所有客户端应用程序共享的数据模型、同步引擎和业务逻辑。
来源:packages/lib/reducer.ts1-542 packages/lib/models/Setting.ts1-784 packages/lib/BaseApplication.ts1-552
Joplin 提供了多种客户端应用程序,它们共享相同的核心功能,但具有特定于平台的实现
来源:packages/app-desktop/ElectronAppWrapper.ts1-676 packages/app-desktop/bridge.ts1-427 packages/app-desktop/app.ts1-623 packages/app-mobile/root.tsx1-1128
Joplin 的一个关键特性是其灵活的同步系统,它支持多种同步目标,并包含端到端加密
来源:packages/lib/models/Setting.ts105-123 packages/app-mobile/root.tsx93-102
Joplin 的设置系统非常广泛,可处理不同平台和配置的配置
来源: packages/lib/models/Setting.ts1-784 packages/lib/services/profileConfig/mergeGlobalAndLocalSettings.ts1-40 packages/lib/models/settings/FileHandler.ts1-84
该应用程序的启动过程很复杂,涉及多个阶段来初始化系统。
来源: packages/app-desktop/main.js1-80 packages/lib/utils/processStartFlags.ts1-236 packages/app-desktop/ElectronAppWrapper.ts79-676 packages/lib/BaseApplication.ts84-552 packages/app-mobile/root.tsx93-102
构建和分发系统负责多个平台的包编译、打包和部署。
来源: package.json15-65 packages/tools/release-server.ts1-28 packages/app-desktop/integration-tests/util/createStartupArgs.ts1-15
Joplin Desktop 支持同时运行应用程序的多个实例,每个实例都有自己的配置文件。
来源: readme/apps/multiple_instances.md1-40 packages/app-desktop/commands/openPrimaryAppInstance.ts1-12 packages/app-desktop/commands/openSecondaryAppInstance.ts1-14
Joplin 使用 Redux 来管理应用程序的状态。
来源: packages/lib/reducer.ts1-542 packages/lib/reducer.test.ts1-34000 packages/app-desktop/app.reducer.js
本概述提供了 Joplin 系统架构的全面介绍。本 wiki 的后续部分将深入探讨特定组件及其实现。