Looks like work. Reads like fiction.
你在看数据库里的文本字段。
只不过,这个字段里的主角刚刚收到了来自明天的短信。
FishCode 是一个长得像代码编辑器的小说阅读器。 把 TXT、EPUB 或 ZIP 拖进来,章节变成文件,故事变成 SQL 数据、JSON、YAML 或代码里的文本。按下 Esc,整个工作区立刻切回普通代码;再按一次,接着刚才的位置读。
不注册,不上传书籍,不调用 AI。一个 HTML,就是你的随身阅读工作区。
- 下载
dist/workspace-reader.html。从 GitHub 文件页使用下载原始文件按钮,或下载整个仓库 ZIP。 - 用 Chrome、Edge 或其他现代桌面浏览器打开。
- 点左侧导入图标,或直接把书拖进窗口。
- 点击文件树切换章节;在阅读设置中选择喜欢的文件视图。
- 点击导出,得到包含正文、界面和依赖的独立 HTML。换一台电脑,断网也能打开。
初次打开自带原创短篇演示,不包含第三方小说。代码视图是阅读排版,不是 SQL/Python/C++ 执行环境。
满屏绿色注释并不总像一个真正的项目。FishCode 默认选择 SQL 文本数据:表结构、事务、插入语句和查询语句包围正文,长文本有了更自然的出现位置。
| 文件视图 | 正文如何出现 |
|---|---|
| SQL(默认) | documents 表里的文本字段,带建表、事务与查询语句 |
| JSON | 文档对象的 paragraphs 数组 |
| YAML | 配置里的多行 content 字段 |
| Markdown | 带元数据的文档正文 |
| Python | 数据类中的多行字符串 |
| Python · 注释混排(可选) | 正文放进短注释,与 2–4 行通用示例代码交替 |
| C++ | std::string_view 原始字符串 |
| TypeScript | 类型友好的文档数据对象 |
打开左下角 阅读设置 → 文件视图 → Python · 注释混排(可选),再选择代码密度:
- 轻量: 每段正文后插入 2 行代码,阅读更连贯。
- 均衡(推荐): 每段 3 行代码,兼顾代码占比与阅读节奏。
- 密集: 每段 4 行代码,让代码占据更多画面。
长正文优先在标点附近拆成短注释,保持原文顺序与内容;短代码带语法高亮,正文使用不倾斜的注释色。文件名变为 pipeline_001.py。切换密度或视图会尽量保持当前正文位置,搜索支持跨注释片段的词句,导出的 HTML 会保留所选视图与密度。
默认仍是 SQL,原有视图和纯净正文都保留。混排代码仅作展示,不执行;它改变屏幕外观,不增加系统安全防护,也不保证旁人无法识别正文。
切换视图时,文件名、扩展名、图标、目录和语言状态一起更新。默认工程名为 content-service,文件名为 fixture_001.sql,不把书名放在浏览器标题里。需要找章节时,可以搜索真实章节名,也可以在设置里显示它们。
- 阅读优先: 14–26 px 字号、可调行距和栏宽;石墨、深夜、日光三种主题;可切换纯净正文。
- 编辑器布局: 活动栏、文件树、标签页、面包屑、行号、小地图、状态栏和命令面板。
- 接着读: 每章独立记住滚动位置,自动恢复上次打开的书,支持一个快捷书签。
- 一键切换: Esc 显示普通代码,同时关掉搜索、弹窗和输出面板;再按一次恢复。可选失焦自动切换。
- 本地优先: 本地导入不上传正文,无追踪、无 CDN、无在线字体;可关闭持久保存或清除本机阅读数据。
- 中英界面: 右下角一键切换,中英文 README 都有。
| 输入 | 支持说明 |
|---|---|
| TXT / Markdown | 中文“第 X 章”、英文 Chapter、Markdown 标题自动分章 |
| HTML | 提取纯文本;兼容旧版 const NOVEL = [...] 阅读器,以及 FishCode 导出的文件 |
| JSON | [{"title":"第一章","body":"正文"}],或含 chapters 数组的对象 |
| DOCX | 提取普通文档段落,不保留复杂排版 |
| EPUB | 按 spine 顺序读取正文;不支持加密 / DRM |
| ZIP | 按自然文件名顺序导入其中的 TXT、MD、HTML、JSON;忽略无关文件 |
支持 UTF-8、GBK / GB18030 和带 BOM 的 UTF-16。乱码时可手动选择编码。
单次导入上限 20 MB,ZIP 解压声明内容上限 64 MB、2,000 个条目,最多 5,000 个阅读分段。超长、无章节文本会自动拆页。RAR / 7z 请先解压;ZIP 内的嵌套压缩包、DOCX、EPUB 请先取出再导入。大文件仍会占用浏览器内存,不要导入来源不可信的异常压缩包。
可以通过本地在线模式读取公开的静态正文页:
python3 server.pyWindows 可双击 start-online.bat(需要 Python 3.10+)。打开终端提示的 http://127.0.0.1:8765,在阅读器中粘贴正文页网址。
FishCode 提取当前页,并识别“下一章 / 下一页”链接。点击下一章时,会向原网站请求下一页,转换后加入文件树;已加载的页面可以回看,也可以导出为离线 HTML。它不会一次爬完整本书。
- 纯静态 / 单 HTML 版只能直连允许 CORS 的页面。大多数网站应使用本地启动器。
- 支持正文选择器,例如
#chaptercontent,帮助适配不同网站。 - 不绕过登录、付费、验证码或访问限制;不执行网站脚本,不支持仅由 JavaScript 动态加载的正文。
- 不保证兼容所有小说网站。找不到下一章时,可以手动输入下一页网址。
- 本地服务只监听
127.0.0.1,不提供公共代理;限制公共 HTTP(S) 标准端口、响应大小和重定向,并验证目标 IP。
更多细节见 在线模式说明。
| 按键 | 动作 |
|---|---|
Esc |
切换代码掩护 / 恢复阅读 |
Alt + ← / → |
上一章 / 下一章 |
Ctrl / ⌘ + B |
显示或隐藏文件树 |
Ctrl / ⌘ + F |
当前章节搜索 |
Ctrl / ⌘ + K |
命令面板 |
Ctrl / ⌘ + + / − |
调整字号 |
阅读器使用原生 HTML / CSS / JavaScript,ZIP 解析使用仓库内附带的 JSZip。运行和构建不需要下载前端依赖。
python3 build.py # 重新生成 index.html 与 dist/workspace-reader.html
npm run dev # 可选:Node.js 静态开发预览
npm test # Node.js 解析检查 + Python 本地服务测试浏览器回归测试:运行 npm run dev 后,打开 /tests/browser.html。测试使用原创和合成内容,会清除该测试站点来源下的 FishCode 阅读缓存,请使用独立浏览器测试环境。覆盖文件导入、视图切换、正文搜索、书签、掩护、导出恢复、在线翻页和进度恢复。完整验证记录见 QA。
如果这个小工具戳中了你,欢迎 Star 收藏,也欢迎 Fork 做出自己的文件视图。
最有帮助的反馈:浏览器版本、文件格式、复现步骤,以及一份不含隐私或受限内容的小样例。在线适配问题请提供可公开访问的页面和正文选择器。
这是一层界面伪装,不会隐藏浏览记录、网络请求、屏幕监控或设备管理记录,也不能保证不被旁观者识别。请合理使用,只导入你有权阅读的内容,不用它绕过网站或单位的访问控制。
本项目不属于、也不隶属于 Microsoft / Visual Studio Code。MIT License;JSZip 许可见 vendor/JSZip-LICENSE.md。内置故事为本项目原创演示。

