菜单

客户端应用程序

相关源文件

本文档概述了 Joplin 生态系统中的客户端应用程序。它解释了每个客户端应用程序的架构、技术和实现细节:桌面版、移动版和命令行界面(CLI)。有关支持这些客户端的核心组件的信息,请参阅 核心组件

概述

Joplin 提供三种主要的客户端应用程序,它们共享相同的核心业务逻辑,同时提供特定于平台的最佳用户体验。

  1. 桌面应用程序:适用于 Windows、macOS 和 Linux 的 Electron 应用程序
  2. 移动应用程序:适用于 Android 和 iOS 的 React Native 应用程序
  3. CLI 应用程序:用于终端使用的命令行界面应用程序

来源:package.json packages/app-desktop/package.json packages/app-mobile/package.json packages/app-cli/package.json packages/lib/package.json packages/renderer/package.json

通用架构

所有客户端应用程序都遵循常见的架构模式,使用相同的核心库并实现相似的数据流。

来源:packages/lib/package.json README.md

所有客户端应用程序共有的组件包括

  1. 数据流:每个客户端都使用 Flux 模式的变体,具有单向数据流:UI → 核心逻辑 → 存储 → 状态更新 → UI
  2. 数据模型:笔记、笔记本(文件夹)、标签和资源(附件)
  3. 存储:用于本地数据持久化的 SQLite 数据库
  4. 同步引擎:允许将数据与各种目标(Joplin Server、云服务等)同步

桌面应用程序

桌面应用程序使用 Electron 构建,为 Windows、macOS 和 Linux 提供跨平台桌面体验。

来源:packages/app-desktop/package.json

主要功能和实现细节

  • 技术:Electron、React、Redux、TypeScript
  • 编辑器集成:支持 Markdown 编辑器(CodeMirror)和富文本编辑器(TinyMCE)
  • 插件支持:可扩展的架构,允许第三方插件
  • 原生集成:访问文件系统、钥匙串、通知和其他原生功能
  • 自动更新:通过 Electron 的 auto-updater 内置更新机制

构建和打包

桌面应用程序使用 Electron Builder 进行打包,该工具会创建特定于平台的安装程序和软件包。

  • Windows:NSIS 安装程序和便携版
  • macOS:DMG 和 ZIP 包
  • Linux:AppImage 和 DEB 包

构建配置定义在 packages/app-desktop/package.json 文件中,位于 build 属性下。

来源:packages/app-desktop/package.json29-128

移动应用程序

移动应用程序是使用 React Native 为 Android 和 iOS 平台构建的。

来源:packages/app-mobile/package.json packages/app-mobile/index.js

主要功能和实现细节

  • 技术:React Native、Redux、TypeScript
  • 原生功能:相机访问、文件系统访问、共享、生物识别认证
  • Web 视图:使用 WebView 进行笔记渲染和富文本编辑
  • 导航:使用 React Navigation 进行屏幕导航
  • 原生模块:使用各种原生模块实现平台特定功能

移动应用程序遵循 index.js 文件中描述的单向数据流。

React => SQLite => Redux => React

来源:packages/app-mobile/index.js1-8

特定平台实现

移动应用程序包含特定于平台的代码和配置,用于:

  • Android:Gradle 构建配置、Android 特定的原生模块
  • iOS:Xcode 项目、iOS 特定的原生模块、App Store 要求

来源:packages/app-mobile/package.json73-77

命令行应用程序

命令行界面(CLI)应用程序提供基于终端的 Joplin 功能访问。

来源:packages/app-cli/package.json

主要功能和实现细节

  • 技术:Node.js、terminal-kit
  • 命令界面:提供管理笔记、笔记本、标签和同步的命令
  • 终端 UI:用于导航和编辑笔记的基于文本的用户界面
  • 编辑器集成:可使用外部编辑器编辑笔记
  • 自动化:用于自动化和与其他工具集成的脚本化界面

CLI 命令

CLI 应用程序提供与 Joplin 交互的各种命令,包括:

  • 笔记管理(创建、编辑、删除)
  • 笔记本管理
  • 标签管理
  • 同步
  • 搜索和过滤
  • 导入和导出

来源:packages/app-cli/package.json39-42

客户端应用程序对比

功能桌面移动端CLI
UI 框架ReactReact Nativeterminal-kit
主要技术Electron, React, ReduxReact Native, ReduxNode.js
离线支持
同步能力
插件支持
富文本编辑器有限
Markdown 编辑器是(CodeMirror)是(基本)是(外部编辑器)
平台Windows、macOS、LinuxAndroid、iOS任何支持 Node.js 的平台

来源:packages/app-desktop/package.json packages/app-mobile/package.json packages/app-cli/package.json

共享组件和实用程序

所有客户端应用程序都共享几个通用组件

来源:packages/app-desktop/package.json160-169 packages/app-mobile/package.json23-31 packages/app-cli/package.json43-46

核心库 (@joplin/lib)

核心库包含所有业务逻辑、数据模型和同步功能,这些都是所有客户端应用程序共享的。这包括:

  • 笔记、笔记本和标签模型
  • 同步引擎
  • 设置管理
  • 搜索功能
  • 导入/导出功能

渲染器 (@joplin/renderer)

渲染器组件负责将 Markdown 内容转换为 HTML 以进行显示。所有客户端都使用它,以确保笔记在不同平台上的渲染一致性。

工具类 (@joplin/utils)

代码库中使用的通用工具和辅助函数。

来源:packages/lib/package.json packages/renderer/package.json packages/tools/package.json