Skip to content
tagbugPublic

About

Modern self-hosted static novel reader

Resources

Stars

1 star

Watchers

1 watching

Forks

Repository files navigation

Yomii:自托管静态小说阅读站

Yomii 是一个轻量、纯粹且尊重隐私的单本小说静态阅读站点生成器。基于 Astro + TypeScript 现代化工程栈构建,随项目附带示例短篇《风经过的地方》(共 3 话)。

特色特性

  • 现代静态工程:基于 Astro 纯静态(SSG)生成,构建速度极快,SEO 友好,支持本地 HMR 开发。
  • 纯粹无干扰阅读:单栏正文排版,支持 4 种精调主题(随系统 / 清白 / 纸色 / 夜读)、字号、行距、版心宽度及宋体/黑体切换。
  • 零 FOUC(无闪烁):首屏同步执行偏好注入,深浅色切换毫秒级生效,杜绝白屏/黑屏闪烁。
  • 高精度段落记忆:基于二分查找算法精确记忆视口段落与相对比例,屏幕缩放或字号调整后依然精准恢复阅读进度。
  • 书签与撤销机制:阅读中一键记录书签与摘录,支持 8 秒防误删撤销。
  • 沉浸专注模式:支持快捷键 F 进入/退出专注阅读,隐藏一切非必要元素。
  • 无障碍与键盘导航:左右方向键翻页、F 专注、Esc 退出、严格的 44px 移动端触控标准与 ARIA 规范支持。
  • 隐私与本地优先:所有数据存放于读者本地 localStorage,零第三方追踪、零 Cookie、零外部网络依赖,内置严苛 CSP。
  • 源文件下载:支持源 TXT 文本文件下载与 SHA-256 校验。

快速上手

本项目使用 Bun 作为 JavaScript/TypeScript 运行时。

1. 安装依赖

bun install

2. 本地开发与预览

启动带热重载(HMR)的本地开发服务:

bun run dev

本地浏览器访问终端提示的地址(通常为 http://localhost:4321/)。

3. 构建静态产物

bun run build

构建结果将直接输出到 dist/ 目录。

4. 自动化测试与完整性检查

bun run test

自动化检查包括所有页面的死链检测、重复 ID 检测、锚点有效性及 TXT 下载一致性验证。


内容导入与配置说明

1. 快速导入任意小说

可使用导入脚本自动解析任意 TXT 小说,自动提取元数据并生成站点配置与静态产物:

bun run import <path-to-novel.txt>

支持可选参数覆盖元数据:

bun run import ./my-novel.txt --title "书名" --author "作者" --site-name "站点名称"

解析器支持的格式包括:

  • 章节标记:第X章/话/节/回(支持阿拉伯数字与中文数字)、Chapter X、序章、尾声、后记 等。
  • 分卷标记(可选):【TrackX:卷名】、第X卷 卷名、卷X 卷名 等。
  • 编码自适应:支持 UTF-8(含 BOM)及 GB18030 / GBK 编码文本。

2. 手动配置 (config.json)

{
  "site_name": "Yomii",
  "source": "content/novel.txt",
  "book_title": "",
  "author": "",
  "base_path": ""
}
  • site_name:站点名称,默认 Yomii。
  • source:小说文本路径(相对项目根目录)。
  • book_title / author:留空时将自动从文本前两行提取。
  • base_path:部署子路径(如 /read)。根目录部署请保持为空。

部署方案

本项目支持自动一键部署与手动部署两种方式。

1. 自动部署(推荐)

通过交互式向导或指定参数实现一键构建与部署:

bun run deploy

亦可通过命令行参数直接执行非交互部署:

# 部署至 Cloudflare Pages(可选自定义域名)
bun run deploy --target cloudflare --project my-reader --domain read.example.com

# 部署至 Vercel(可选自定义域名)
bun run deploy --target vercel --domain read.example.com

# 部署至 GitHub Pages(自动识别仓库名子路径并注入 .nojekyll)
bun run deploy --target github

# 部署至 GitHub Pages(使用自定义域名,自动以根路径构建并配置 CNAME)
bun run deploy --target github --domain read.example.com

前置依赖与认证说明

平台 CLI 工具 未安装时的降级方案 认证前置要求
Cloudflare Pages wrangler 自动通过 bunx wrangler 调用 需完成 Cloudflare 账号登录(wrangler login)
Vercel vercel 自动通过 bunx vercel 调用 需完成 Vercel 账号登录(vercel login)
GitHub Pages gh / gh-pages 自动通过 bunx gh-pages 调用 需绑定远程仓库 origin,推荐安装 gh(gh auth login)

注:GitHub Pages 部署脚本会自动检测远程仓库名并设定匹配的基础子路径(如 /Yomii),预置 .nojekyll 避免 Jekyll 屏蔽 _astro 目录;若指定了自定义域名,则会自动按根路径部署并写入 CNAME。


2. 手动部署

若希望通过 Git 平台 CI/CD 或自行托管服务器,可参考以下配置:

方案 A:Cloudflare Pages / Vercel

  1. 连接 Git 仓库。
  2. 构建命令填 bun run build,输出目录填 dist。
  3. 项目已在 public/_headers 中预置了适用于 Cloudflare Pages 的安全标头与缓存策略。

方案 B:GitHub Pages

  1. 在仓库设置中启用 GitHub Pages,选择 gh-pages 分支作为来源,或配置 GitHub Actions 构建 dist/ 目录。
  2. 子路径适配:若部署在默认的 GitHub Pages 子路径(如 https://<username>.github.io/<repo>/),构建时需传入环境变量 BASE_PATH=/<repo> bun run build(或在 config.json 中配置 "base_path": "/<repo>")。若使用自有域名,则保持根路径 "" 即可。
  3. 项目已在 public/.nojekyll 中预置空文件,确保 GitHub Pages 不会过滤 _astro/ 资源目录。

方案 C:独立服务器(Caddy / Nginx)

将 dist/ 目录中的全部文件上传到 Web 服务器根目录即可:

  • Caddy 配置参考 deploy/Caddyfile。
  • Nginx 配置参考 deploy/nginx.conf。

开源许可

本项目基于 MIT 许可协议开源,详见 LICENSE。

About

Modern self-hosted static novel reader

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages