开发者生态
evening
Show HN: Kage – 将任何网站隐藏到单个二进制文件以供离线查看
2026-06-14
1 阅读
tamnd
kage kage(影,“影子”)将网站克隆到一个可以离线浏览的文件夹中,并删除所有脚本。它在真正的无头 Chrome 中打开每个页面,等待页面稳定下来,拍摄人类会看到的 DOM 快照,然后删除所有 JavaScript 并将 CSS、图像和字体拉到本地路径。磁盘上的内容看起来就像实时站点,并且不运行任何代码。安装 • 快速启动 • 命令 • 克隆 • 打包 • 本机窗口 • 工作原理 您已经知道问题所在。你在想要保留的页面上点击“另存为”,六个月后你打开它,发现一个空白屏幕,一个永远不会停止的旋转器,或者一个仍然试图回拨到不再存在的分析服务器的副本。该页面从来都不是真正属于您的。它是其他人的 JavaScript 的瘦客户端。影走另一条路。它驱动一个真正的浏览器,让页面完成它所做的一切,获取完成的结果,然后从中剥离每个脚本。没有跟踪,没有网络调用,没有惊喜。您可以直接从磁盘上打开 .html 文件,将其交给朋友,或者打包成一个文件,然后忘记十年。完整的文档和指南位于 kage.tamnd.com 。安装 go install github.com/tamnd/kage/cmd/kage@latest 更喜欢预构建的二进制文件?获取一个存档、.deb/.rpm/.apk 或来自releases 的校验和。或者跳过自己安装 Chrome 并使用捆绑 Chromium 的容器映像: docker run --rm -v " $PWD /out:/out " ghcr.io/tamnd/kage clone paulgraham.com kage 驱动真正的浏览器,因此它需要主机上的 Chrome 或 Chromium。它自己找到一个系统安装;使用 --chrome 或 KAGE_CHROME 环境变量将其指向特定的位置。该容器不需要任何额外的东西。 Shell 补全在框中提供: kage补全 bash|zsh|fish|powershell 。快速开始 让我们镜像 Paul Graham 的文章,这样你就可以在飞机上、没有 wifi 的笔记本电脑上或在 2050 年网站最终改变设计后阅读它们: # 1. 将网站克隆到 $HOME/data/kage/paulgraham.com/ kage clone paulgraham.com # 2. 在浏览器中离线阅读 kageserve $HOME /data/kage/paulgraham.com # open http://127.0.0.1:8800 这就是整个循环。每篇文章、每张图像、每个样式表都冻结在磁盘上,并且可以通过零网络运行。接下来的两个步骤是可选的,但很好:将整个内容折叠到一个文件中,然后将其在自己的窗口中打开。 # 3. 将镜像压缩为单个可共享文件 kage pack paulgraham.com # -> paulgraham.com.zim kage open paulgraham.com.zim # 4. 或压缩为一个可执行文件,该可执行文件是站点 kage pack paulgraham.com --format 二进制 -o paulgraham ./paulgraham # 自行服务,无需安装任何内容 命令 命令 kage clone 的作用是什么 渲染站点headless Chrome 并编写一个可浏览、无脚本的镜像 kageserve [dir] 通过本地 HTTP 服务器预览克隆的文件夹 kage pack 将镜像折叠到一个 ZIM 存档中,或使用一个独立的查看器二进制文件 kage open 将打包的 ZIM 返回以供离线阅读 Clone # 整个站点,进入 $HOME/data/kage// kage clone https://paulgraham.com # 仅前 50 页,两个深度链接,快速体验 kage clone paulgraham.com --max-pages 50 --max-depth 2 # 仅较大站点的一部分 kage clone go.dev --scope-prefix /doc # 也拉入子域,并滚动每一页以触发延迟加载的图像 kage clone example.com --subdomains --scroll # 下个月回来并重新渲染以捕获新文章 kage clone paulgraham.com --refresh 克隆是礼貌,广度优先爬行。它读取 robots.txt ,从 sitemap.xml 中为自己播种,并保留在种子主机上,除非您另有说明。它也是顽固的幂等性:每个页面都由它写入的文件作为键控,因此通过 http 和 https 到达的同一篇文章,无论有或没有尾部斜杠,都只会被获取一次。按 Ctrl-C 即可在退出时保存其位置;再次运行它,它会从停止的地方继续运行。 --refresh 重新渲染到位,--force 擦除主机并开始清理。您实际上会达到的标志: 标志 默认含义 -o, --out $HOME/data/kage 输出 root;镜像落在 // -p, --max-pages 0 N 页后停止 (0 = 无限制) -d, --max-depth 0 跟踪多少个深度链接 (0 = 无限制) --scope-prefix 只抓取以此前缀开头的路径 --subdomains false 将种子主机的子域视为范围内 --exclude 要跳过的路径前缀 (可重复) --scroll false 自动滚动每个页面以触发延迟加载 --workers 4 多少要立即渲染的页面 --no-robots false 忽略 robots.txt(友善一点) -f, --force false 首先删除主机的任何现有镜像 --chrome Chrome/Chromium 二进制 kage 克隆的路径 --help 拥有其余内容,包括渲染计时、并发性和资源大小旋钮。 Serve kageserve 在克隆的文件夹上运行一个小型静态文件服务器,因此链接和资产的解析方式就像在真实主机上一样:kageserve $HOME /data/kage/paulgraham.com # open http://127