QUICK FIND

搜索站点内容

输入关键词开始搜索,无需连接服务器。

⌘ K 随时打开,按 Esc 关闭

项目架构

BookX 的模块边界、工作区数据、静态构建和发布流程。

总览

BookX 的核心是 Go 静态站点构建器。命令行与桌面程序共用 internal/bookx/;桌面程序启动本机 HTTP 服务,在浏览器中运行 Vue 工作台。正式站点生成后只包含静态文件,不需要工作台或 Go 进程在线运行。

flowchart LR
  CLI[bookx 命令行] --> Core[internal/bookx]
  Desktop[bookx-desktop 托盘] --> Studio[internal/studio 本机服务]
  Studio --> UI[嵌入的 Vue 工作台]
  Studio --> Core
  Files[bookx.yml · Markdown · 图片] --> Core
  Themes[内置或自定义主题] --> Core
  Core --> Output[dist 静态站点]
  Output --> Publish[本地 · Git · SSH/SFTP]

代码分工

路径职责
cmd/bookx/命令行入口,支持的命令见下文。
cmd/bookx-desktop/internal/desktop/系统托盘、浏览器启动、工作区切换和桌面生命周期。
internal/studio/本机 HTTP API、工作区管理、预览服务和嵌入式 Vue 页面。前端源码在 src/
internal/bookx/配置与内容读取、Markdown、安全过滤、路由、资源、主题、构建、同步和发布。
themes/Go HTML 模板、CSS、JavaScript 和内置主题清单。
build/桌面安装包、图标及包验证脚本。

命令行入口

cmd/bookx/main.go 提供以下命令,桌面工作台通过同一套核心能力操作站点:

命令用途
bookx init创建站点工作区与初始配置。
bookx new新建文章、文档合集、章节或文档页面。
bookx build生成静态站点,可选择包含草稿。
bookx validate检查内容并尝试构建,不替换正式站点输出。
bookx clean清理生成的站点文件。
bookx serve在本机提供站点预览服务。
bookx watch监测文件变化并重新构建。
bookx studio启动浏览器工作台的本机服务。
bookx sync同步工作区源码到 Git 远程仓库。
bookx publish重新构建公开站点并发布到指定目标,支持发布检查。
bookx versionbookx help查看版本和命令用法。

cmd/bookx-desktop/ 是单独的桌面托盘程序,负责启动和管理本地工作台。

internal/studio/dist/ 由 Vue 构建生成,Go 通过 embed 将其放进程序;themes/ 中的内置主题源码也会嵌入程序。源码检出后先在 internal/studio/ 运行 npm cinpm run build,再执行 Go 构建或测试。不要手工编辑生成的 internal/studio/dist/

工作区的数据边界

bookx.yml 保存站点地址、内容目录、主题、SEO 等可同步设置。博客和文档的 Markdown Front Matter 保存稳定 id、标题、可见性等内容信息。文档目录结构决定合集与章节关系;编译核心负责生成 URL 和导航树,主题只负责展示。

.bookx/local.yml 保存本机的 Git 同步、发布目标和工作台偏好。.bookx/ 下的回收站、预览和 SQLite 图片索引属于本地状态;图片索引可以从真实文件重建,不能当作内容来源。dist/ 是正式构建输出。

构建与预览

  1. LoadConfig 读取配置并确定工作区路径。
  2. 内容加载器读取博客和文档,解析 Front Matter 与 Markdown,检查稳定 ID、可见性和路由,并建立文档树与内容资源关系。
  3. 主题加载器选择内置或工作区主题,准备模板及浏览器资源;构建器据此生成页面、搜索、归档、RSS 和站点地图。
  4. build 先写入临时目录,生成成功后替换已有的正式输出;validate 在临时目录完成同样的生成检查,不替换正式输出。

本地“构建全部”使用独立的 .bookx/preview/,可查看草稿、私有和仅本地内容,并关闭评论与统计。正式发布总是重新生成公开站点。构建器提供统一的 URL 处理,主题和正文链接都要兼顾根域名与子路径部署。

同步与发布

源码同步处理工作区中的 Markdown、图片、配置与主题源文件;发布只处理公开静态产物。internal/bookx/deploy.go 实现 Git 同步和本地、Git、SSH/SFTP 发布目标。多目标发布先构建一次,再按选择顺序分别发布;某个目标失败不会撤销已经成功的目标。

扩展站点表现时,优先修改 themes/;新增内容关系、路由或构建规则时,修改 internal/bookx/ 并为主题提供明确的数据字段。具体的主题接口见主题设计,发布配置见同步与发布

Conversation

讨论这篇内容

评论由 GitHub Discussions 提供 · 打开讨论仓库