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 运行时。
bun install启动带热重载(HMR)的本地开发服务:
bun run dev本地浏览器访问终端提示的地址(通常为 http://localhost:4321/)。
bun run build构建结果将直接输出到 dist/ 目录。
bun run test自动化检查包括所有页面的死链检测、重复 ID 检测、锚点有效性及 TXT 下载一致性验证。
可使用导入脚本自动解析任意 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 编码文本。
{
"site_name": "Yomii",
"source": "content/novel.txt",
"book_title": "",
"author": "",
"base_path": ""
}site_name:站点名称,默认Yomii。source:小说文本路径(相对项目根目录)。book_title/author:留空时将自动从文本前两行提取。base_path:部署子路径(如/read)。根目录部署请保持为空。
本项目支持自动一键部署与手动部署两种方式。
通过交互式向导或指定参数实现一键构建与部署:
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。
若希望通过 Git 平台 CI/CD 或自行托管服务器,可参考以下配置:
- 连接 Git 仓库。
- 构建命令填
bun run build,输出目录填dist。 - 项目已在
public/_headers中预置了适用于 Cloudflare Pages 的安全标头与缓存策略。
- 在仓库设置中启用 GitHub Pages,选择
gh-pages分支作为来源,或配置 GitHub Actions 构建dist/目录。 - 子路径适配:若部署在默认的 GitHub Pages 子路径(如
https://<username>.github.io/<repo>/),构建时需传入环境变量BASE_PATH=/<repo> bun run build(或在config.json中配置"base_path": "/<repo>")。若使用自有域名,则保持根路径""即可。 - 项目已在
public/.nojekyll中预置空文件,确保 GitHub Pages 不会过滤_astro/资源目录。
将 dist/ 目录中的全部文件上传到 Web 服务器根目录即可:
- Caddy 配置参考
deploy/Caddyfile。 - Nginx 配置参考
deploy/nginx.conf。
本项目基于 MIT 许可协议开源,详见 LICENSE。