跳至正文

架构与代码导航 ​

Picloom 的核心负责决定文件如何上传、访问和清理,插件负责执行路径生成、存储和图片处理。数据库记录文件、副本与任务的状态,图片内容由存储插件保存;前端通过 HTTP API 操作这些能力。

仓库边界 ​

picloom 维护应用、内置实现、默认主题和宿主集成示例;picloom-tooling 维护公共 SDK、规则、工具及脚手架;picloom-extensions 维护官方可选插件和主题。主程序和扩展通过包入口依赖工具链,不通过跨仓相对路径读取源码。主题模板独立维护,不在构建时读取宿主默认主题。

应用如何启动 ​

入口职责
src/main.ts启动 Bun HTTP 服务,解析可信代理地址,接收停机信号
src/runtime.ts调用应用组装、首次初始化,协调请求、维护循环、备份与停机
src/bootstrap.ts打开持久化层、连接业务服务、加载插件、恢复文件和上传会话,提供应用关闭方法
src/cli.ts执行初始化、密码恢复等命令;不启动 HTTP 服务

数据目录锁防止多个应用实例同时使用同一目录。CLI 也需要这个锁,运行初始化前应停止使用该目录的服务。

备份与停机如何协调 ​

runtime.ts 协调维护操作与任务执行器,先阻止新工作,再等待已有工作退出:

场景协调顺序
备份或恢复进入维护状态 → 等待在途请求与维护工作 → 暂停任务领取并等待运行任务 → 关闭应用 → 备份或恢复 → 重新打开应用
停机停止 HTTP 服务与维护循环 → 等待已有维护操作和在途工作 → 暂停任务领取 → 关闭业务服务、取消并等待剩余任务 → 释放插件、数据库和目录锁

备份期间可能重新创建应用;若同时收到停机请求,重新打开后仍需暂停任务领取,随后完成关闭。文件状态恢复见取消与重启,备份操作见数据、备份与升级。

一次上传经过哪里 ​

分片会话由 core/uploads.ts 管理,合并后的内容进入文件上传流程。core/files.ts 负责上传编排、流水线和文件操作;返回成功时不要求所有副本写入与保存后处理全部完成。

一次图片访问经过哪里 ​

core/derived-images.ts 协调派生处理与共享工作,core/cache.ts 管理派生缓存,core/image-response.ts 组织图片响应。同一派生结果可以被多个请求共同等待;其中一个请求取消,不应终止其他请求仍需要的处理。

模块职责 ​

位置负责什么修改时注意
src/http路由、认证、输入解析、响应转换业务状态变化交给核心服务
src/core上传、访问、配置、账号、导入和任务等业务规则当前 files.ts 仍承担多项文件编排,先沿调用链定位
src/persistence数据访问接口、查询与初始化核心通过接口访问数据;两种数据库共用查询实现
src/plugins安装包、配置验证、实例创建与释放插件调用期间持有实例租约
src/builtins内置插件实现遵循与外部插件相同的公共协议
picloom-tooling/plugin-sdk(独立仓库)插件类型、宿主服务协议和辅助函数协议变更需同步示例与开发文档
src/infra文件、临时空间、图片、密钥和备份等基础能力外部资源不随数据库事务回滚
shared前后端共用的类型、校验和设置定义不放入只属于服务端的依赖
webVue 上传与管理界面通过 API 读取和修改状态

从哪里开始修改 ​

需求优先查看
上传限制、分片与取消core/uploads.ts、core/files.ts
图片访问、变换或缓存core/files.ts、core/derived-images.ts、core/cache.ts
后台领取、重试与删除core/tasks.ts、core/files.ts、persistence/repositories.ts
上传配置与流水线配置core/configuration.ts、core/request-params.ts
设置及默认值shared/runtime-settings.ts、src/config.ts、core/delivery-settings.ts
备份与停机src/runtime.ts、infra/backup.ts

表中省略的服务端路径均以 src/ 为根。涉及数据库修改继续阅读 数据访问与初始化;涉及异步工作继续阅读 文件、副本与任务状态机。

包配置与文案 ​

@picloom/package-rules 仅统一宿主与主题工具应保持一致的资源路径规则、作者文案回退和草稿默认值生成。语言注册、字段文案组装及声明校验留在宿主的 shared/ 中。shared/field-schema.ts 与 src/core/schema-validation.ts 负责公共字段规则。插件声明入口为 src/plugins/declaration.ts,主题入口为 src/themes/schema.ts,分别限制允许的扩展和编辑行为。

作者文案通过 fieldText() 解析,管理员配置值不经过文案回退。两个 SDK 独立发布协议类型,不依赖宿主模块;主题通过注入的 ctx.t() 使用字典。

文档随 main 分支维护;部署与升级请核对产物版本及兼容说明。