本文内容
Pake 网页转桌面应用:体积、PWA 对比与登录限制
你最常用的网站,可能只需要一个独立窗口,而不是再附带一整套浏览器。Pake 使用 Tauri 和 Rust,把网址或本地 Web 构建产物打包成桌面应用。它提供轻量外壳、应用图标和桌面控制功能,无需专门维护一个 Electron 项目。截至 2026 年 9 月 22 日,Pake 的 GitHub 仓库显示约 6.16 万颗星。
本文评估的是于 2026 年 9 月 20 日发布的 Pake 3.17.0。重点不是复述“小于 10 MB”的宣传,而是区分安装包体积与内存占用,并说明系统 WebView、Google 登录、本地路由和分发方面的限制。本文依据文档与已发布文件进行分析,没有进行实际运行性能基准测试。
Pake 是什么?它究竟把什么变成了桌面应用?
Pake 是一个开源网页桌面打包工具。它把现有 Web 界面放进原生桌面窗口,但不会把 HTML 自动翻译成原生控件,也不会重写应用的业务代码。内容和业务逻辑仍由原网站提供。把在线 AI 服务打包成桌面应用,同样不代表模型会在你的电脑上本地运行。
项目 README将其描述为安装包约比 Electron 小 20 倍、应用通常低于 10 MB。这是项目的概括性说法,不是对所有操作系统、安装格式和网站的保证。更准确的表述是:Pake 可以避免让每个应用都携带一套独立的 Electron 浏览器运行时。
Pake 打包后一定小于 10 MB 吗?先看发布文件
即使是同一个 ChatGPT 封装应用,不同格式的下载体积也相差很大。下表记录了Pake 3.17.0 官方发布附件中 GitHub 显示的下载大小,不是安装后的磁盘占用,也不是 RAM 测量结果。
| 平台 | 发布文件 | 下载大小 |
|---|---|---|
| macOS | ChatGPT.dmg | 9.42 MB |
| Windows | ChatGPT_x64.msi | 3.54 MB |
| Linux,Debian 包 | ChatGPT_x86_64.deb | 4.55 MB |
| Linux,AppImage | ChatGPT_x86_64.AppImage | 76 MB |
同一版本的 DeepSeek.dmg 还有 10.8 MB。因此,“所有 Pake 应用都小于 10 MB”显然不够准确,打包格式会直接影响结果。项目提供 ChatGPT、Gemini 和 YouTube 等预构建应用,但Pake 发布的网页封装,并不自动等于服务提供方发布的官方客户端。
评估时应分开记录四个指标:下载大小、安装后的应用体积、额外运行时依赖,以及运行中的内存使用。小安装包只能证明第一项。本文没有构建对应的 Electron 版本作对照,因此不会把“20 倍”写成我们自己的测试结论。
Pake 与 Electron 的区别:浏览器引擎并没有消失
Electron 官方文档说明其会嵌入 Chromium 和 Node.js,从而让开发者在不同桌面平台上控制浏览器环境。Pake 则通过 Tauri 使用操作系统的 WebView 集成。它减少了每个应用重复携带的运行时,但也更依赖目标设备的实际环境。
Tauri 的 WebView 版本说明列出了不同平台的引擎:
| 平台 | WebView | 需要验证的内容 |
|---|---|---|
| macOS | WKWebView / WebKit | 对计划支持的 macOS 版本是否兼容。 |
| Windows | Microsoft Edge WebView2 | 运行时是否存在,以及如何部署和管理。 |
| Linux | WebKitGTK | 发行版依赖库、显示环境和软件包格式。 |
Windows 的 WebView2 本身基于 Chromium,所以把 Pake 说成“完全不使用 Chromium”会产生误导。优势在于应用不必自带完整的 Electron 运行时,而不是网页渲染不再消耗资源。
Windows 的分发策略也会改变体积计算。Tauri 的 Windows 安装包文档区分了按需下载 WebView2 与为离线安装直接携带运行时两种方式。后者可能显著增加包体。这些是框架提供的部署选项,不能据此认定所有 Pake MSI 都包含相同的运行时内容。
如何用一条命令把网页打包成桌面应用?
下面是针对本文评估版本的最小示例。将 https://example.com 替换为你有权使用的网站。命令会下载并执行构建工具,运行前应先确认软件包来源。
npx [email protected] https://example.com --name "MyWorkspace"也可以运行 npm install -g [email protected] 全局安装 CLI,然后使用后续示例中的 pake 命令。没有指定图标时,Pake 会尝试获取网站的 favicon。如果自动获取失败,可以自行提供合适格式的图标文件。
一条命令不等于零环境准备。Pake 推荐 Node.js 22 或更新版本,并要求 Rust 1.85 或更新版本。原生编译还需要各平台工具:macOS 的 Xcode Command Line Tools、Windows 的相应 C++ 工具链,以及 Linux 发行版对应的开发库。先检查Tauri 的环境要求,再判断错误是否真的来自 Pake,而不是缺少编译器。
应使用适合目标平台的构建机器或 CI runner。不要以为在 Mac 上执行一次命令,就能直接生成三个平台均已签名的正式安装包。首次构建可能需要下载依赖,生成的文件通常位于当前工作目录。Windows 默认仍使用 MSVC;3.17.0 也提供 --windows-toolchain gnu,适用于已经配置好 MinGW/MSYS2 的 x64 环境。这是另一种编译器方案,而不是完全不需要编译器。
不重写 Web 产品,也能调整窗口和桌面操作
完成全局 CLI 安装后,可以从以下配置开始:
pake https://example.com --name "MyWorkspace" --width 1280 --height 900 --activation-shortcut "CmdOrControl+Shift+9" --show-system-tray --enable-drag-drop--hide-title-bar 用于 macOS。Windows 和 Linux 对应的选项是 --hide-window-decorations,但它也会移除原生窗口控制按钮,需要确认用户仍能方便地操作窗口。快捷键和拖放功能也应结合目标网站实际测试,不能只看命令执行是否成功。
Pake 还支持注入本地 CSS 和 JavaScript,具体见高级自定义指南。样式文件可以精简界面,却不能让被身份提供方禁止的登录方式变得受支持。注入代码应像应用代码一样接受审查,尤其是在已经登录的账户页面中。不要直接使用来历不明的脚本;网站更新后,也要重新验证依赖页面选择器的调整。
Pake 和 PWA 怎么选?什么时候值得单独打包?
如果个人使用的目标只是独立窗口和启动图标,建议先尝试浏览器提供的安装功能。MDN 的 Web 应用安装指南解释了不同浏览器与平台的差异。安装一个网站,与让它离线可用,是两件不同的事。
| 方案 | 适合从这里开始的需求 | 主要取舍 |
|---|---|---|
| 浏览器安装的网站 / PWA | 个人使用为主,主要需要一个独立窗口。 | 安装和系统集成受浏览器功能范围影响。 |
| Pake | 需要有独立名称的桌面安装包,以及可配置的现有网页外壳。 | 需要维护 WebView 兼容性和封装应用的发布版本。 |
| 定制 Tauri 应用 | 产品需要有意设计的原生系统集成。 | 团队负责应用代码、权限和各平台测试。 |
| Electron 应用 | 受控的 Chromium 环境和 Node.js 集成足以抵消运行时成本。 | 需要分发并维护应用携带的运行时。 |
我们的建议是:优先选择能可靠完成目标流程的最简单方案。Pake 的价值尤其体现在浏览器安装与定制桌面产品之间。更广泛的共享代码和原生开发决策,可参考我们的跨平台框架战略分析,不应由一张安装包大小截图决定。
Google 登录失败、Cloudflare 循环验证和内存占用
Pake 故障排查 FAQ明确讨论了嵌入式登录被拒、Cloudflare 循环验证和 WebView 内存较高的问题。这些都是“把任何网页变成应用”需要补充的边界。首页能够打开,不等于完整用户流程可以正常使用。
Google 登录不只是弹窗配置问题
--multi-window 可以帮助某些弹窗流程,--safe-domain 则控制哪些可信主机的页面留在应用内部。它们都不能覆盖身份提供方的规则。Google 的 OAuth 政策限制通过开发者可控制的嵌入式用户代理完成授权。如果服务拒绝该封装,应选择受支持的浏览器授权流程或官方客户端,而不是伪装 WebView。
Cloudflare 验证循环可能直接阻止上线
Pake FAQ 提醒,部分受保护的网站可能一直停留在验证环节,Linux WebKitGTK 环境尤其需要注意。文档没有承诺可靠的 Pake 侧修复。应尽早把它作为是否采用该方案的验收条件,而不是关闭保护措施,或向用户保证更换 user-agent 就能解决。
下载很小,不代表 WebView 进程占用很小
网站脚本、渲染和 WebView 进程仍然需要内存。一个复杂的 AI 聊天界面即使装进小外壳,也可能保持较高资源占用。比较时应在相同工作负载下统计完整进程组,而不是只观察 Rust 启动进程。不能从安装包大小推导出固定比例的 RAM 节省。
Pake 能打包本地网站吗?能否离线使用?
可以。Pake 接受本地 HTML 文件,也接受静态构建目录。使用目录时,根目录必须包含 index.html:
pake ./dist --name "LocalDashboard"但这里有一个重要限制:本文评估版本的本地打包支持 hash 路由,不支持 SPA 的 history 路由模式。对应版本的 Pake CLI 文档说明了这个限制和前面使用的参数。本地 React 或 Vue 前端可能需要先修改路由方式,才能正确处理页面内部的深层链接。
打包前端文件不会顺带打包你的后端、云端 API 或身份认证服务。宣称支持离线前,应断开网络并测试每个关键操作。JavaScript 从本地加载、数据却仍依赖远程 API 的控制台,还不能算作离线产品。
Pake JSON 配置:让团队构建和 AI 自动化更可控
团队使用时,把窗口设置存入可审查的配置文件,比每次重新拼接长命令更合适。将下面的例子保存为 app.json,其字段遵循Pake 3.17.0 配置 schema:
{
"$schema": "https://raw.githubusercontent.com/tw93/Pake/V3.17.0/schema/pake.schema.json",
"url": "https://example.com",
"name": "SupportDesk",
"width": 1280,
"height": 900,
"activationShortcut": "CmdOrControl+Shift+9",
"showSystemTray": true,
"appVersion": "1.0.0"
}pake --config app.json --json项目的自动化接口约定规定:stdout 输出一个 JSON 结果,日志写入 stderr。退出码分别表示成功(0)、输入无效(2)、构建失败(3)、环境缺失或初始化失败(4),以及非预期错误(1)。
不要把 ok: true 当成所有请求的 Linux 包格式都已生成的证明。多目标构建可能只部分成功。还应检查 outputs[].format、warnings,并验证列出的实际产物。本地相对路径以进程工作目录为基准。构建成功同样不会自动证明登录、支付和文件处理已经通过测试。
用 GitHub Actions 构建 Pake 应用,无需本地编译环境
Pake 的 GitHub Actions 指南给出了云端流程:fork 仓库,启用 Actions,打开 Build App With Pake CLI,填写网址和应用设置,然后运行工作流。完成后,从该次运行的 artifacts 区域获取构建文件。
对于企业内部应用,我们建议先审查工作流、固定预期源码版本,并最小化权限。不要把凭据放进网址、仓库配置或构建日志。签名秘密应使用平台的 secrets 机制管理,而不是写进本文示例 JSON。托管 runner 减少的是本地编译器配置工作,不是供应链审查和发布验证责任。
签名、维护责任与 Pake 的许可证例外
向同事或客户分发前,应明确谁负责更新、回归测试和安全事件处理,并遵守目标平台的发布要求。例如,Tauri 的 macOS 签名指南说明了分发涉及的代码签名与公证。不要把关闭操作系统保护作为常规安装步骤。
Pake 使用 GPL-3.0-or-later,并附有专门的生成应用例外条款。仅通过标准方式打包,不会单独导致生成的应用必须以 GPL 发布;对 Pake 源码本身进行修改,仍涉及相应 GPL 义务。这也不代表可以违反其他服务的条款,随意分发其商标、内容或功能。应分别评估该例外与实际分发用途。
发布网页桌面封装前,建议完成哪些验收?
下表是我们建议的验收项目,不是我们已经对预构建二进制文件完成的测试:
| 范围 | 需要的验证结果 |
|---|---|
| 身份与导航 | 登录、多因素认证、退出、切换账户、外部链接和重新打开应用均可正常完成。 |
| 核心功能 | 上传、下载、拖放、键盘访问,以及所需的摄像头和麦克风流程通过测试。 |
| 资源使用 | 分别记录下载体积、安装占用、运行时依赖和完整进程组内存。 |
| 分发与恢复 | 干净的目标机器可以安装、更新和卸载;失败发布具有可执行的回滚路径。 |
如果要交付面向客户的桌面体验,我们的定制软件开发服务可以协助判断网页外壳与完整产品之间的边界。Offlinery 案例提供的是独立的产品交付背景,不代表该项目使用 Pake。可使用我们的软件上线前 QA 检查清单组织验证,或与 Wavect 讨论网页转桌面应用的具体要求。
文档和发布元数据核查于 。命令是根据文档编写的示例;运行性能和服务提供方兼容性仍需在实际部署中验证。
Pake 常见问题
Pake 是什么?
Pake 是开源命令行工具,可以把网站或本地静态 Web 构建封装到 Tauri 和 Rust 桌面外壳中。它使用平台 WebView,而不是内嵌 Electron 运行时,但界面仍然是 Web 应用。
Pake 应用一定小于 10 MB 吗?
不一定。Pake 3.17.0 的 ChatGPT 封装应用在 Windows MSI 格式下为 3.54 MB,Linux AppImage 则为 76 MB。这些是下载大小,不是安装占用或运行内存。
Pake 一定比 Electron 更省内存吗?
本文没有证明固定比例的内存节省。网页与 WebView 仍会使用 RAM。应在相同负载下统计完整进程组;安装包大小不能替代内存基准测试。
为什么 Pake 内的 Google 登录会失败?
身份提供方可能拒绝嵌入式 WebView。弹窗和导航参数不能覆盖其政策。封装被拒绝时,应使用受支持的浏览器授权流程或服务的官方客户端。
Pake 能把本地 React 或 Vue 应用打包为离线软件吗?
可以打包包含 index.html 的静态目录。本文评估版本支持 hash 路由,不支持 SPA 的 history 路由。要真正离线运行,关键文件、数据和流程还不能依赖不可达的远程服务。
什么情况下应该选择 PWA,而不是 Pake?
如果只需要独立窗口和启动图标,先尝试浏览器安装。只有独立桌面安装包及其配置功能带来明确价值时,再考虑 Pake。
Pake 提供的 ChatGPT 和 Gemini 下载是官方应用吗?
它们是 Pake 项目分发的网页封装。出现在 Pake 的发布列表中,不代表 OpenAI、Google 或其他服务提供方发布或认可这些客户端。
用 Pake 生成的应用可以采用专有许可证分发吗?
Pake 的生成应用例外说明,标准打包本身不会单独要求产物使用 GPL。修改 Pake 源码以及使用第三方服务的条款,仍需分别评估。
自动化构建除了 ok: true,还要检查什么?
应检查退出码、warnings 和 outputs[].format,并验证实际产物。Linux 多目标构建可能成功但未生成所有请求格式。功能验收仍是独立步骤。
最终思考
Pake 提供了一个实用的中间方案:为已经存在的 Web 产品增加可配置桌面外壳。它的价值在于减少不必要的运行时重复分发,而不是让浏览器成本凭空消失。根据实际安装包格式、登录兼容性和验收要求,判断它是否比浏览器安装或定制桌面应用更合适。
