📢gitzw.com上线了,功能陆续更新中,如有问题或反馈请在下方反馈/建议中给我们留言。
用Pake把任意网页变成桌面应用

用Pake把任意网页变成桌面应用

📌 本文速覽

Pake是一个基于Rust Tauri的轻量级工具,能将任何网页一键打包成桌面应用,安装包比Electron小20倍。读完本教程,你将学会直接使用现成应用、在线构建、命令行打包,以及自定义样式和快捷键。

🎯 入门📖 14 章⏱ ≈82 分鐘讀完🔄 更新於 2026-06-25
源專案:github.com/tw93/Pake★ 57,510

1. Pake是什么:为什么你的网页需要一个桌面壳

你每天打开浏览器,点开书签,找到微信读书、ChatGPT、DeepSeek…… 然后发现浏览器标签栏里还躺着十几个其他页面。想专注读会儿书,微信消息一闪,又切过去了。

这就是问题:网页被浏览器绑架了

Pake 就是来解决这个的。它用一行命令,把任意网页变成一个独立的桌面应用。装好后,它有自己的图标、自己的窗口、自己的快捷键,跟 Chrome、Safari 完全没关系。

它跟 Electron 有什么区别?

你可能听说过 Electron——VS Code、Slack、Discord 都是用它做的。Electron 的安装包动辄 100MB+,因为每个应用都自带一个完整的 Chromium 浏览器。

Pake 用的是 Rust Tauri,安装包通常不到 10MB。内存占用也低得多。你打开一个 Electron 应用,它先吃掉 200MB 内存;Pake 应用,几十 MB 就够。

直接看数据:Pake 安装包比 Electron 小将近 20 倍。磁盘上占的空间,一个 Electron 应用够装 20 个 Pake 应用。

它到底能干什么?

拿几个现成的例子说:

  • 微信读书:不用开浏览器,直接双击图标就能看书。支持快捷键翻页、沉浸式阅读。
  • ChatGPT:独立窗口,随时呼出对话,不会跟其他标签页混在一起。
  • DeepSeek:同样,一个图标点开就用。
  • YouTube Music:当音乐播放器用,关掉浏览器也不影响听歌。

这些应用在 Pake 的 GitHub 仓库里都有现成的安装包,Mac、Windows、Linux 全支持。你直接下载就能用。

你能用它做什么?

不只是用现成的。任何网页都能打包

  • 你的团队有个内部工具,每次都要打开浏览器、登录、找书签——打包成应用,双击就进。
  • 你有个博客,想给读者一个桌面版——Pake 搞定。
  • 你常用某个在线工具,但不想被浏览器其他标签页分心——给它一个独立的壳。

怎么用?

三种方式,看你是什么角色:

  1. 纯用户:去 GitHub Releases 页面,下载现成的安装包。装完就用,什么都不用配。
  2. 想自己打包:用 GitHub Actions 在线构建,不用装任何软件。把网址填进去,等几分钟,安装包就出来了。
  3. 开发者:装 Pake CLI,一行命令打包任意网址。还能自定义图标、窗口大小、快捷键、CSS 样式。

这本书就是带你走完这三条路。从下载现成应用开始,到在线构建,再到 CLI 打包,最后自己定制一个完整的桌面应用。

先跑起来

Pake GitHub Releases 页面,找到 WeRead(微信读书),下载你系统对应的安装包:

  • Mac:WeRead.dmg
  • Windows:WeRead_x64.msi
  • Linux:WeRead_x86_64.deb

装完双击打开。看到微信读书的界面了吗?它没有地址栏、没有书签栏、没有其他标签页。就是一个干干净净的阅读器。

这就是 Pake 做的事:把网页从浏览器里解放出来

2. 零环境搭建:直接下载现成的Pake应用(如ChatGPT、微信读书)

直接下载现成的Pake应用

这一章的目标:不装任何软件,不写一行代码,直接拿到一个能用的桌面应用。

你不需要懂RustTauri、命令行。只要会点鼠标、会下载文件就行。

先搞清楚你的操作系统

Pake 给每个应用都准备了三种安装包:

  • Mac.dmg 文件
  • Windows.msi 文件
  • Linux.deb 文件

看一眼你的电脑是什么系统,后面只下载对应的那个。

第一步:找到下载页面

打开浏览器,访问 Pake 的 GitHub 仓库:

https://github.com/tw93/Pake

往下翻,找到 Popular Packages 这个表格。里面列了十几个现成的应用:ChatGPT、微信读书、Twitter、YouTube、DeepSeek……

每个应用有三列下载链接:Mac、Windows、Linux。

第二步:下载你需要的应用

举个例子,你想把微信读书变成桌面应用。

找到 WeRead 那一行,点你系统对应的链接:

  • Mac 用户点 Mac
  • Windows 用户点 Windows
  • Linux 用户点 Linux

点完浏览器就开始下载了。文件不大,微信读书的 Mac 版只有 6MB 左右——比 Electron 那套动不动几百 MB 的玩意儿轻太多了。

第三步:安装并运行

Mac 用户:

  1. 双击下载的 .dmg 文件
  2. 把弹出的应用图标拖进 Applications 文件夹
  3. 去启动台找到它,双击打开

第一次打开可能会提示“无法验证开发者”。别慌:

  • 系统设置 → 隐私与安全性,往下翻
  • 看到“已阻止使用...”那行,点 仍要打开

Windows 用户:

  1. 双击 .msi 文件
  2. 一路点 Next,装完桌面上就有图标了
  3. 双击运行

Linux 用户:

sudo dpkg -i WeRead_x86_64.deb

或者双击 .deb 文件用软件中心安装。

装好后长什么样

打开微信读书,你会看到一个干干净净的窗口——没有浏览器地址栏、没有书签栏、没有插件图标。就是一个纯粹的阅读器。

窗口可以拖拽、可以缩放。快捷键 Ctrl+Q 直接退出(Mac 上是 Cmd+Q)。

其他应用同理

想用 ChatGPT 桌面版?找到 ChatGPT 那行,点你系统的链接下载。

想用 YouTube Music 听歌?找到 YouTube Music,下载安装。

步骤完全一样:找到 → 点链接 → 安装 → 打开。

常见问题

下载很慢怎么办?

GitHub 下载在国内有时候慢。可以试试用镜像站,把链接里的 github.com 换成 githubfast.com

Mac 上提示“文件已损坏”?

系统设置 → 隐私与安全性,看看有没有被拦截的记录。如果有,点“仍要打开”。如果还是没有,打开终端执行:

sudo xattr -d com.apple.quarantine /Applications/WeRead.app

WeRead.app 换成你实际的应用名。

Windows 上提示“Windows 已保护你的电脑”?

更多信息,然后点 仍要运行

Linux 上依赖缺失?

sudo apt --fix-broken install

小结

你现在已经有了一个能用的桌面应用。没装 Node.js、没装 Rust、没碰命令行。

这就是 Pake 的“零环境搭建”——项目作者已经把最常用的几个网页打包好了,你直接拿现成的用。

下一章会教你用 GitHub Actions 在线打包,连本地下载都省了。

3. 在线构建:不用装任何软件,用GitHub Actions打包你的第一个应用

在线构建:不用装任何软件,用GitHub Actions打包你的第一个应用

上一章你下载了别人打包好的应用。现在轮到自己动手了——但不用装任何开发环境。

这一章的目标:浏览器里完成全部操作,把任意网页变成桌面安装包。你只需要一个GitHub账号。

先搞清楚原理

Pake项目里藏了一套自动化流水线,叫GitHub Actions。它的工作方式很简单:

  1. 你把想打包的网址告诉它
  2. 它自动在远程服务器上安装RustTauri,编译出安装包
  3. 打包完成后,你直接从网页上下载

整个过程你本地什么都不用装。连命令行都不用碰。

第一步:Fork Pake项目

打开浏览器,访问:

https://github.com/tw93/Pake

点页面右上角的 Fork 按钮(就在头像旁边)。

弹窗里直接点 Create fork,不用改任何选项。等几秒钟,浏览器会跳转到你自己的Pake副本。

预期结果:你看到的是 你的用户名/Pake,不是 tw93/Pake

第二步:找到打包配置文件

在你自己fork的项目页面里,点 Actions 标签(顶部导航栏中间)。

第一次进来,会看到一个绿色的大按钮:

I understand my workflows, go ahead and enable them

点它。这是告诉GitHub:允许这个项目运行自动化任务。

预期结果:页面左侧出现一个列表,里面有一项叫 build

第三步:触发第一次打包

点左侧的 build,然后点右侧的 Run workflow 按钮(灰色带下拉箭头)。

下拉菜单里,你需要填一个参数:

  • URL to package:你想打包的网页地址

先试一个简单的。填:

https://developer.mozilla.org/zh-CN/

其他参数先不管。点绿色的 Run workflow

预期结果:页面顶部出现一个黄色圆点,表示任务已启动。点进去能看到实时日志在滚动。

第四步:等它跑完

这一步最考验耐心。第一次打包需要下载Rust编译器和依赖,大概5-15分钟。

你可以点进正在运行的任务,看日志:

Building application...
这一步会编译Rust代码,生成安装包。

常见情况:日志里出现 warning 不用管,只要没有 error 就没事。

预期结果:黄色圆点变成绿色勾号。说明打包成功。

第五步:下载安装包

任务跑完后,点进这个任务详情页。往下翻,找到 Artifacts 区域。

你会看到几个文件:

  • Pake_x64.msi — Windows安装包
  • Pake_x86_64.deb — Linux安装包
  • Pake.dmg — Mac安装包

点你当前系统对应的那个,直接下载。

预期结果:得到一个安装文件。双击就能装,跟上一章下载的现成应用一样。

常见问题

打包失败,日志显示 error: failed to run custom build command

大概率是网络问题。GitHub Actions服务器有时连不上某些资源。重新跑一次就行——点 Run workflow 再试。

下载的安装包打不开,提示损坏

Mac用户常见。打开终端执行:

sudo xattr -d com.apple.quarantine /Applications/你的应用名.app

把路径换成你实际的应用位置。

Windows用户双击msi没反应

右键点msi文件,选 以管理员身份运行

小技巧:打包你自己的网站

现在试一个对你更有用的。比如你的个人博客、公司后台、或者常用工具。

重复第三步,把URL换成你自己的网址。比如:

https://你的博客.com

打包完成后,下载安装包。装好后打开,它就是一个独立的桌面应用了。

注意:如果网站需要登录,打包后的应用里也要登录。Pake只是套了个壳,网页本身的功能不变。

下一步

你已经成功在线打包了一个应用。但每次改网址都要重新跑一遍流水线,有点麻烦。

下一章会教你装CLI工具,在本地一行命令搞定打包,不用等那15分钟。

4. 安装CLI工具:一行命令搞定Pake命令行环境

装好 CLI,后面所有操作都靠它

上一章我们用 GitHub Actions 在线打包,不用装任何东西。但每次改个图标、调个窗口大小都要重新触发 Actions,等几分钟,太慢了。

CLI 工具就是解决这个问题的——装好之后,你在终端里敲一行命令,几秒钟就能打包一个应用。改配置、换图标、调窗口,全在本地秒级完成。

先确认你电脑上有 Node.js

Pake CLI 依赖 Node.js 运行。打开终端(Mac 叫“终端”,Windows 叫“命令提示符”或 PowerShell),敲:

node -v

如果看到类似 v18.0.0 的版本号,说明已经有了。如果报错 command not found,先去 nodejs.org 下载 LTS 版本安装,装完再回来。

一行命令安装 Pake CLI

npm install -g pake-cli

-g 表示全局安装,装完后你在任何目录都能用 pake 命令。

等进度条跑完,验证一下:

pake --version

正常会输出版本号,比如 2.0.0。如果报错,大概率是权限问题——Mac/Linux 用户试试前面加 sudo

sudo npm install -g pake-cli

Windows 用户用管理员身份打开 PowerShell 再装。

装 Rust 环境(这一步不能省)

Pake 底层用 Rust 编译,CLI 只是帮你调用了 Rust 的构建工具。所以你还得装 Rust。

rustup.rs 复制那行安装命令,或者直接敲:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Mac/Linux 用户一路回车选默认安装。Windows 用户去下载 rustup-init.exe,运行后选默认。

装完重启终端,验证:

rustc --version

看到 rustc 1.70.0 类似的输出就对了。

装系统依赖(不同平台不一样)

Pake 编译时需要一些系统级的库,缺了会报编译错误。

Mac 用户:装 Xcode Command Line Tools

xcode-select --install

弹窗点“安装”,等几分钟就好。

Windows 用户:装 Visual Studio Build Tools

visualstudio.microsoft.com 下载,安装时勾选“使用 C++ 的桌面开发”,其他默认。这个过程比较慢,大概 10-15 分钟。

Linux 用户(Ubuntu/Debian):

sudo apt update
sudo apt install libwebkit2gtk-4.0-dev build-essential curl wget file libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev

其他 Linux 发行版参考 Tauri 官方文档,但 Ubuntu 用户跑上面这行就够了。

跑个最简单的例子验证

装完所有东西,找个你常用的网站试试。比如把百度打包成桌面应用:

pake https://www.baidu.com

第一次运行会下载一些依赖,然后开始编译。根据电脑性能,可能需要 1-3 分钟。编译完成后,应用会自动打开。

看到百度首页出现在一个独立的窗口里,说明 CLI 装好了,环境也配齐了。

常见问题

pake 命令找不到

重新打开终端,或者检查 npm 全局安装路径是否在 PATH 里。Mac/Linux 用户敲:

echo $PATH

看有没有包含 /usr/local/lib/node_modules~/.npm-global/bin。没有的话,把下面这行加到 ~/.zshrc~/.bashrc 里:

export PATH=$PATH:/usr/local/lib/node_modules/.bin

编译报错 linker not found

Mac 用户没装 Xcode Command Line Tools,跑 xcode-select --install 就行。Windows 用户没装 Visual Studio Build Tools,回去装。

libwebkit2gtk-4.0-dev 找不到

Linux 用户先 sudo apt update,如果还找不到,检查你的 Ubuntu 版本是不是太老(18.04 以下),建议升级到 20.04 以上。

下载依赖特别慢

npm 慢的话换成国内镜像:

npm config set registry https://registry.npmmirror.com

Rust 的依赖慢的话,在 ~/.cargo/config.toml 里加:

[source.crates-io]
replace-with = 'ustc'
[source.ustc]
registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"

装好了,下一步

CLI 装完,后面所有章节的操作都靠它。下一章我们正式用 CLI 打包一个完整的应用,还会教你换图标、改窗口大小。

5. 5分钟跑通:用CLI把任意网址打包成桌面应用

CLI 装好了,但还没真正用过。这一章就干一件事:拿一个网址,跑 pake 命令,5 分钟内看到桌面应用弹出来。

先确认上一章装好的 CLI 能用。打开终端,敲:

pake --version

如果看到版本号(比如 2.x.x),说明环境就绪。如果报 command not found,回到第 4 章重新装一遍。

第一步:挑一个目标网址

随便选一个你常用的网页。我拿 Notion 做演示——它没有官方桌面客户端,用 Pake 包一个正好。

pake https://www.notion.so

就这么一行。Pake 会自动拉取网页内容,编译成桌面应用。第一次跑会下载 RustTauri 的依赖,大概 1-3 分钟,取决于网速。

预期结果:终端开始滚动输出,最后出现一行类似 FinishedBuild completed 的提示。然后桌面会弹出一个窗口,里面就是 Notion 的网页。

如果窗口没自动弹出,别急。去你当前目录下找——Pake 会把安装包生成在 output 文件夹里。

ls output/

你会看到类似 Notion_x64.dmg(Mac)、Notion_x64.msi(Windows)或 Notion_x86_64.deb(Linux)的文件。双击安装就行。

第二步:给应用起个名字

默认名字是从网址里猜的,比如 Notion。你想叫它“我的笔记”也行:

pake https://www.notion.so --name "我的笔记"

--name 参数控制应用显示名称和安装包文件名。注意:名字里带空格要用引号包起来。

第三步:指定输出目录

默认输出到当前目录的 output 文件夹。想换个地方:

pake https://www.notion.so --output ~/Desktop/my-apps

这样安装包直接扔到桌面上的 my-apps 文件夹里,方便找。

第四步:一次打包多个平台

默认只打当前系统的包。如果你在 Mac 上,想顺便给 Windows 和 Linux 也生成安装包:

pake https://www.notion.so --targets mac,windows,linux

--targets 后面跟平台名,用逗号隔开。注意:跨平台打包需要对应平台的编译工具链,Mac 上打 Windows 包需要装 mingw-w64。初学者建议先只打当前平台的包,等熟悉了再搞跨平台。

常见问题

报错 Error: Failed to download
网络问题。Pake 需要从 GitHub 下载 Rust 和 Tauri 的依赖。换个网络环境,或者挂代理。如果公司内网限制多,试试用手机热点。

报错 Error: Command failed with exit code 1
通常是 Rust 编译出错。检查一下 Rust 版本:

rustc --version

需要 1.70 以上。版本太低就升级:

rustup update

打包出来窗口白屏
目标网站可能做了反爬或需要登录。Pake 本质是个浏览器壳,如果网站本身在普通浏览器里打开就白屏,那 Pake 也一样。先确认网址在 Chrome 里能正常打开。

安装包打不开(Mac)
Mac 会拦截未签名的应用。去「系统设置 → 隐私与安全性」,找到被拦截的应用,点「仍要打开」。

一个完整的例子

把 Notion 打包成“我的笔记”,放到桌面,只打 Mac 包:

pake https://www.notion.so --name "我的笔记" --output ~/Desktop

等 2-3 分钟,桌面上出现 我的笔记.dmg。双击安装,打开,一个独立的 Notion 桌面应用就跑起来了。任务栏里不会和浏览器混在一起,切换窗口也方便。

现在你已经跑通了第一个 Pake 应用。下一章会教你怎么换图标、改名字,让这个应用看起来更像原生软件。

6. 自定义应用图标和名称:让打包的应用看起来更专业

刚用 CLI 打包出来的应用,默认图标是 Pake 的 logo,应用名也是 Pake。装到电脑上,跟别人的应用混在一起,根本分不清哪个是哪个。这一章就干两件事:改名字、换图标。让打包出来的应用看起来像你自己做的。

先搞清楚名字和图标在哪

Pake 打包时,应用名和图标是通过命令行参数传进去的。上一章我们用的命令长这样:

pake https://www.your-site.com

这条命令没传任何自定义参数,所以 Pake 用了默认值。现在加两个参数:

  • --name:指定应用名称
  • --icon:指定图标文件路径

第一步:准备图标文件

图标有格式要求。Pake 底层用 Tauri,不同平台要不同格式:

  • macOS.icns 格式,至少 512x512 像素
  • Windows.ico 格式,至少 256x256 像素
  • Linux.png 格式,至少 512x512 像素

最简单的方法:找一张 1024x1024 的 PNG 图片,让 Pake 自己转换。Pake 的 CLI 会自动处理格式转换,你只需要提供一张高清 PNG。

没有现成图标?icon.kitchenCanva 在线生成一个。或者直接用你网站的 favicon,大多数网站都有。

假设你有一张图叫 my-app-icon.png,放在当前目录下。

第二步:带参数打包

直接跑这条命令:

pake https://www.your-site.com --name "我的应用" --icon ./my-app-icon.png

--name 后面跟应用名,可以用中文。--icon 后面跟图标文件的路径。

预期结果:打包过程跟之前一样,但生成的安装包文件名变成了 我的应用.dmg(Mac)或 我的应用_x64.msi(Windows)。安装后,应用名称和图标都变成了你指定的。

第三步:验证效果

安装刚打包的应用。打开后,看三个地方:

  1. Dock 栏或任务栏:图标是不是你那张图
  2. 应用菜单:顶部菜单栏显示的应用名是不是你写的名字
  3. 关于本应用:Mac 上点菜单栏的应用名 → "关于",Windows 上右键任务栏图标 → "属性"

如果这三个地方都对上了,搞定。

常见坑和排查

图标没变,还是 Pake 默认图标?

检查图标文件路径。用绝对路径最保险:

pake https://www.your-site.com --name "我的应用" --icon /Users/你的用户名/Desktop/my-app-icon.png

Windows 用户注意路径里的反斜杠要转义,或者直接用正斜杠:

pake https://www.your-site.com --name "我的应用" --icon C:/Users/你的用户名/Desktop/my-app-icon.png

图标文件格式不对?

Pake 会尝试自动转换,但源文件质量太差(比如小于 128x128)可能失败。确保 PNG 至少 512x512。

应用名显示乱码?

中文名在 macOS 上没问题。Windows 上如果出现乱码,换成英文名试试:

pake https://www.your-site.com --name "MyApp" --icon ./my-app-icon.png

打包报错 "icon not found"?

文件路径写错了,或者文件不存在。先确认文件在不在:

ls -l ./my-app-icon.png

实际例子:把 Notion 打包成你自己的应用

假设你想把 Notion 做成桌面应用,叫 "我的笔记",用一张蓝色笔记本图标。

  1. 准备图标:找一张 1024x1024 的 PNG,命名为 notebook-icon.png
  2. 跑命令:
pake https://www.notion.so --name "我的笔记" --icon ./notebook-icon.png
  1. 等几分钟,安装包生成在 output 目录下
  2. 安装,打开,Dock 栏上显示的是你的蓝色笔记本图标,菜单栏写着"我的笔记"

小技巧

  • 图标文件放哪都行,但建议跟打包命令在同一个目录,路径写起来简单
  • 应用名不要带特殊符号/\: 这些),不同平台对文件名有不同限制
  • 想换回默认图标? 不加 --icon 参数就行
  • 想改应用名但保留默认图标? 只传 --name,不传 --icon
pake https://www.your-site.com --name "我的应用"

这样应用名变了,图标还是 Pake 默认的。

下一章,我们让应用启动时自动调整窗口大小和位置,不用每次都手动拖。

7. 调整窗口大小和位置:让应用启动时自动适应你的屏幕

每次启动应用都要手动拖窗口、调大小,烦不烦?这一章就解决这个问题——让应用启动时自动出现在你指定的位置,窗口大小也固定好。

先确认你已经装好 Pake CLI,并且能用它打包应用。如果还没搞定,先回去看第 5 章。

窗口参数就两个:宽高和位置

Pake 的 CLI 提供了四个参数控制窗口行为:

  • --width:窗口宽度,默认 1200
  • --height:窗口高度,默认 800
  • --x:窗口左上角距屏幕左侧的距离
  • --y:窗口左上角距屏幕顶部的距离

单位都是像素。不传 --x--y 时,窗口默认居中。

先跑起来:固定窗口大小

假设你要把 Notion 打包成 1024x768 的应用:

pake https://www.notion.so --width 1024 --height 768

打包完成后启动应用,窗口就是 1024x768,不会再弹出一个撑满屏幕的大窗口。

再控制位置:让窗口出现在右下角

你想让应用启动时自动贴在屏幕右下角,比如做一个常驻的便签工具。先量一下你的屏幕分辨率——1920x1080 的话,窗口 400x300,放在右下角就是 x=1520, y=780。

pake https://keep.google.com --width 400 --height 300 --x 1520 --y 780

启动后窗口直接贴在右下角,不用再拖。

多显示器怎么办

--x--y 的值是相对于主显示器的坐标。如果你有副屏,把 x 设成负值或大于主屏宽度的值,窗口就会跑到副屏上。

举个例子:主屏 1920x1080,副屏在右侧,分辨率也是 1920x1080。想让窗口出现在副屏左上角:

pake https://example.com --x 1920 --y 0

常见问题

窗口没出现在我指定的位置? 检查坐标是否超出屏幕范围。比如屏幕是 1920x1080,你设 --x 2000,窗口会有一部分跑到屏幕外。把 x 控制在 0 到 1920 之间就行。

窗口大小不对? Pake 的默认窗口有最小尺寸限制,不能小于 400x300。如果你设了 --width 300,实际窗口还是 400 宽。

我想让窗口启动时最大化? Pake 不支持启动时自动最大化。但你可以把宽高设成接近屏幕分辨率的值,比如 1920x1080 的屏幕就设 --width 1920 --height 1080,效果差不多。

实用技巧

把常用配置记下来,下次直接复用。比如你经常打包工具类网站,统一用 800x600 居中:

pake https://tool.com --width 800 --height 600

想做一个固定在左上角的小工具窗口,400x300:

pake https://minitool.com --width 400 --height 300 --x 0 --y 0

现在你的应用启动时已经自动出现在该出现的位置了。下一章我们去掉浏览器边框,让它看起来更像原生应用。

8. 启用沉浸式窗口:去掉浏览器边框,获得原生应用体验

去掉浏览器边框,获得原生应用体验

默认情况下,Pake 打包出来的应用带着浏览器那套东西——地址栏、标签栏、菜单栏。一眼就能看出是网页套壳。沉浸式窗口就是把这些全砍掉,只留网页内容本身,看起来跟原生桌面软件一模一样。

先看看效果:运行一个带沉浸式窗口的应用,窗口里只有你的网页内容,没有地址栏,没有菜单栏,连窗口标题栏都变成网页自己的了。鼠标移到窗口顶部才能看到系统级的关闭、最小化按钮。这才是桌面应用该有的样子。

前置条件

  • 已经装好 Pake CLI(第4章)
  • 已经能用 CLI 成功打包过应用(第5章)
  • 有一个待打包的网址,比如 https://your-tool.com

第一步:加一个参数

在打包命令里加上 --immersive

pake https://your-tool.com --immersive

就这么简单。不加这个参数,打包出来的应用有浏览器边框;加了,边框消失。

第二步:看看效果

打包完成后,启动应用。你会看到:

  • 窗口没有标题栏,没有地址栏
  • 网页内容直接铺满整个窗口
  • 鼠标移到窗口最顶部,系统菜单栏(关闭、最小化、最大化)才出现
  • 窗口可以正常拖动——按住网页内容的任意空白区域拖动就行

如果网页本身有滚动条,滚动条会紧贴窗口边缘,看起来更干净。

第三步:配合窗口大小一起用

沉浸式窗口最好配合固定窗口大小使用,不然每次打开窗口大小都不一样,体验不好。把第7章的内容结合起来:

pake https://your-tool.com --immersive --width 1200 --height 800

这样应用启动时就是 1200x800 的沉浸式窗口,没有边框,没有多余元素。

常见问题

窗口拖不动了?

沉浸式窗口的拖动区域是网页内容本身。如果网页顶部有固定导航栏或者可点击区域,鼠标点上去可能拖不动。解决办法:按住网页内容的空白区域拖动,或者从窗口边缘拖。

Mac 上菜单栏不见了?

沉浸式模式下,Mac 的顶部菜单栏(文件、编辑、视图这些)默认隐藏。鼠标移到屏幕最顶部才会显示。这是正常行为。

Windows 上任务栏不显示应用图标?

沉浸式窗口不会影响任务栏图标。如果图标不显示,检查一下打包时有没有指定 --icon 参数(第6章)。

Linux 上窗口装饰没了?

Linux 的窗口管理器不同,表现可能不一样。如果完全看不到关闭按钮,试试用快捷键 Ctrl+Q 退出应用(第9章会讲怎么设置快捷键)。

什么时候该用沉浸式

  • 工具类网站(笔记、画图、代码编辑器)——沉浸式窗口让它们看起来像原生软件
  • 阅读类网站(文档、博客)——没有地址栏干扰,专注内容
  • 任何你想让它"看起来不像网页"的场景

什么时候不该用

  • 需要频繁查看或复制 URL 的网站
  • 依赖浏览器地址栏功能(比如 OAuth 回调显示 URL)的网站
  • 网页本身没有提供返回、前进按钮,你又需要这些功能

小技巧

先不加 --immersive 打包一个版本,用几天看看。确认网页在普通窗口下运行正常,再打包沉浸式版本。这样万一出问题,你知道是沉浸式模式导致的还是网页本身的问题。

现在去把你常用的网页打包成沉浸式应用,体验一下"原生感"。

9. 设置快捷键:为应用添加全局快捷键(如Ctrl+Q退出)

快捷键:让应用响应键盘操作

打包好的应用默认没有快捷键。你想按 Ctrl+Q 直接退出,或者按 Ctrl+R 刷新页面——这些都得手动配。

Pake 支持两种快捷键:全局快捷键(应用在后台也能响应)和应用内快捷键(只有窗口激活时才生效)。本章只讲全局快捷键,因为最常用。

先搞清楚默认快捷键

Pake 内置了几个默认快捷键,不用配就能用:

快捷键 功能
Cmd/Ctrl + Shift + I 打开开发者工具
Cmd/Ctrl + Shift + R 刷新页面

MacCmd 对应 Windows/Linux 的 Ctrl。这两个快捷键够调试用,但日常操作不够。

添加自定义快捷键

CLI 打包时,通过 --shortcut 参数指定。格式是:

快捷键标识符=功能

多个快捷键用逗号隔开。

先看一个完整的例子——给 ChatGPT 应用加上退出和刷新快捷键:

pake https://chat.openai.com \
  --name ChatGPT \
  --shortcut "quit=CommandOrControl+Q,reload=CommandOrControl+R"

跑完这行命令,应用就支持:

  • Ctrl+Q(Mac 上 Cmd+Q)退出应用
  • Ctrl+R(Mac 上 Cmd+R)刷新页面

支持的快捷键功能

Pake 目前支持这些功能标识符:

标识符 作用
quit 退出应用
reload 刷新页面
devtools 打开/关闭开发者工具
undo 撤销
redo 重做
cut 剪切
copy 复制
paste 粘贴
select_all 全选
minimize 最小化窗口
close 关闭窗口
hide 隐藏应用(仅 Mac)
zoom_in 放大页面
zoom_out 缩小页面
zoom_reset 重置缩放

快捷键组合写法

CommandOrControl 是个特殊写法——它会自动适配系统:

  • Mac 上变成 Cmd
  • Windows/Linux 上变成 Ctrl

其他按键直接写名字:

CommandOrControl+Shift+Q     # Ctrl+Shift+Q 或 Cmd+Shift+Q
Alt+F4                       # 仅 Alt+F4
CommandOrControl+Shift+KeyA  # Ctrl+Shift+A 或 Cmd+Shift+A

注意按键名要写标准名称:KeyADigit1F1 这种,别写 a1

实际场景:给笔记应用配一套快捷键

假设你打包了一个笔记工具,想要:

  • Ctrl+Q 退出
  • Ctrl+N 新建笔记(这个需要网页本身支持,快捷键只负责触发)
  • Ctrl+Shift+I 打开调试工具

命令:

pake https://your-notes-app.com \
  --name MyNotes \
  --shortcut "quit=CommandOrControl+Q,reload=CommandOrControl+R,devtools=CommandOrControl+Shift+I"

常见问题

快捷键没反应?

先检查两件事:

  1. 快捷键是否被系统或其他应用占用了。比如 Mac 上 Cmd+Q 是系统级退出快捷键,Pake 能覆盖它,但某些系统快捷键(如 Cmd+Tab)抢不过。
  2. 确认你用的功能标识符拼写正确。quit 不是 exitreload 不是 refresh

怎么知道快捷键生效了?

打开应用,按你配的快捷键。比如配了 quit=CommandOrControl+Q,按 Ctrl+Q 应用应该直接关闭。如果没反应,检查终端输出有没有报错。

能配多个快捷键做同一件事吗?

不能。每个功能标识符只能绑定一个快捷键。想换绑,重新跑打包命令覆盖就行。

进阶:用配置文件管理快捷键

如果快捷键太多,命令行写起来很乱。可以写个 JSON 配置文件:

{
  "shortcuts": {
    "quit": "CommandOrControl+Q",
    "reload": "CommandOrControl+R",
    "devtools": "CommandOrControl+Shift+I",
    "minimize": "CommandOrControl+M",
    "zoom_in": "CommandOrControl+=",
    "zoom_out": "CommandOrControl+-"
  }
}

然后打包时引用:

pake https://example.com --name MyApp --config ./shortcuts.json

这样改快捷键不用重新敲一长串命令,改 JSON 文件再打包就行。

记住一点

快捷键是打包时写死的。想改快捷键?重新跑一次 pake 命令,覆盖之前的配置。没有运行时动态修改快捷键的功能——至少 CLI 版本不支持。

10. 拖拽功能:让桌面应用支持文件拖拽上传

很多网页应用支持拖拽上传文件,比如在线图片压缩、文档转换、AI 绘图。但 Pake 默认生成的窗口,拖拽文件进去只会触发浏览器的默认行为——要么打开文件,要么啥也不干。要让你的桌面应用真正“接住”拖进来的文件,需要手动开启拖拽功能。

先确认你手头有上一章打包好的应用,或者至少能跑通 pake 命令。如果你还没装 CLI,先回第 4 章装好。本章直接改配置,不需要重新装任何东西。

第一步:找到你的应用配置文件

每个 Pake 应用在打包时都会生成一个 pake.json 配置文件,放在你执行 pake 命令的目录下。如果你按第 5 章的步骤打包过,比如:

pake https://www.iloveimg.com/zh-cn --name ImageCompress

那当前目录下就会多出一个 ImageCompress 文件夹,里面有个 pake.json

打开它,内容大概长这样:

{
  "url": "https://www.iloveimg.com/zh-cn",
  "name": "ImageCompress",
  "width": 1200,
  "height": 800,
  "fullscreen": false,
  "resizable": true,
  "icon": "icon.png",
  "drag": false
}

注意最后一行 "drag": false——这就是拖拽功能的开关。默认是关的。

第二步:把 drag 改成 true

直接改这个值:

"drag": true

保存文件。就这么简单。

第三步:重新打包应用

配置改完,需要重新生成安装包。在终端里执行:

pake https://www.iloveimg.com/zh-cn --name ImageCompress --config pake.json

--config 参数告诉 Pake 使用你刚才改好的配置文件。如果你不指定,它会用默认配置(drag 还是 false)。

等打包完成(大概 1-3 分钟),安装新生成的 .dmg.msi.deb

第四步:测试拖拽

打开新安装的应用。找个图片文件,从桌面拖到应用窗口里。

如果一切正常,你会看到文件被网页应用识别并开始处理。比如 iLoveIMG 会直接显示“拖放图片到这里”的提示变成上传进度条。

如果拖进去没反应,先确认网页本身是否支持拖拽上传。有些网站需要点击某个区域才能激活拖拽区域,或者只接受特定格式的文件。你可以先手动点一下上传按钮,再拖文件试试。

常见问题

拖进去文件,窗口变成空白或打开了新页面

这是浏览器默认行为——文件被当成链接打开了。检查 pake.json 里的 drag 是不是 true,然后重新打包。如果已经是 true,可能是你改完配置后没重新安装,旧版本还在用。

拖拽时鼠标指针显示禁止符号

说明网页应用没有正确处理 dragoverdrop 事件。这不是 Pake 的问题,是网页本身不支持拖拽。你可以换个支持拖拽的网站测试,比如 remove.bgtinyjpg.com

我想让某些区域不支持拖拽,比如导航栏

Pake 的拖拽功能是全局开关,要么全开要么全关。如果你想精细化控制,需要改源码——这超出了本章范围。对大多数场景来说,全局开启就够了。

一个真实场景

假设你经常用 squoosh.app 压缩图片。每次都要打开浏览器、拖图片进去、压缩、下载。现在把它打包成桌面应用,开启拖拽:

pake https://squoosh.app --name Squoosh --drag

注意这里直接在命令行传了 --drag 参数,效果和改 pake.json 一样。打包安装后,你从 Finder 或资源管理器拖一张 5MB 的照片到 Squoosh 窗口,它立刻开始压缩。整个过程不用碰鼠标点任何按钮。

记住一点:--drag 参数只在打包时生效。如果你已经装过旧版本,必须重新安装才能用上拖拽功能。

11. 去除广告和多余元素:用CSS定制网页样式

为什么需要CSS定制

网页打包成桌面应用后,那些广告、侧边栏、底部推广、弹窗提示还在。它们不是应用的一部分,只是网页自带的噪音。

Pake 支持在打包时注入自定义 CSS,直接把这些元素藏起来。效果跟浏览器装广告屏蔽插件一样,但更彻底——CSS 是编译进应用的,用户打开就没有。

前置条件

你已经用 CLI 成功打包过一个应用(第5章的内容)。项目目录结构完整,能找到 src-tauri 文件夹。

第一步:找到要隐藏的元素

打开目标网页,按 F12 打开开发者工具。用“选择元素”工具(左上角箭头图标)点一下你想去掉的广告或多余模块

看右侧 Styles 面板,记下它的选择器。常见的有:

  • #ad-banner —— ID 选择器
  • .sidebar-right —— 类选择器
  • footer —— 标签选择器
  • div[class*="ad"] —— 属性选择器

比如你想去掉某个博客的右侧推荐栏,选中后看到它的 class 是 sidebar-recommend

第二步:创建 CSS 文件

在项目根目录下新建一个文件,叫 custom.css

/* 隐藏广告和多余元素 */
.sidebar-recommend {
  display: none !important;
}

/* 去掉底部版权推广 */
.footer-promo {
  display: none !important;
}

/* 隐藏弹窗遮罩 */
.modal-overlay {
  display: none !important;
}

!important 是关键——网页本身的样式优先级可能更高,加上它能强制覆盖。

第三步:告诉 Pake 加载这个 CSS

打开 src-tauri/tauri.conf.json,找到 tauri 配置块。在里面加上 custom_css 字段:

{
  "tauri": {
    "custom_css": "../custom.css",
    // ... 其他配置保持不变
  }
}

路径是相对于 src-tauri 目录的。../custom.css 表示项目根目录下的那个文件。

第四步:重新打包

直接运行你之前用的打包命令:

pake build

或者如果你用的是 GitHub Actions,提交代码后自动构建。

实战:去掉 YouTube 的推荐视频和评论区

YouTube 网页版在桌面应用里,左侧视频、右侧推荐、下面评论区。如果你只想看视频本身,可以这样写:

/* 隐藏右侧推荐栏 */
#secondary {
  display: none !important;
}

/* 隐藏评论区 */
#comments {
  display: none !important;
}

/* 让视频区域占满宽度 */
#primary {
  max-width: 100% !important;
  width: 100% !important;
}

打包后打开,YouTube 就变成一个纯播放器。

常见问题

CSS 没生效

  • 检查 tauri.conf.json 里的路径对不对。路径写错不会报错,只是不加载。
  • 确认选择器写对了。在浏览器控制台输入 document.querySelector('你的选择器'),看能不能找到元素。
  • 有些网站用 JavaScript 动态生成广告,CSS 隐藏不了。这种情况需要用 display: none !important 配合 visibility: hidden

想隐藏的元素加载后才出现 网页先渲染骨架,再通过 AJAX 加载广告。CSS 在页面加载时就生效,但广告后来才出现。

解决办法:用 display: none !important 把容器先藏起来,广告加载后也显示不了。

只想在桌面应用里隐藏,网页版不受影响 CSS 只在你打包的应用里生效。网页版浏览器打开完全不变。

进阶技巧

一次隐藏多个相似元素,用逗号分隔选择器:

.ad-banner, .sidebar-ad, .footer-ad {
  display: none !important;
}

隐藏整个区域,包括它的所有子元素:

#recommendations, .related-videos {
  display: none !important;
}

有些网站用 iframe 嵌入广告,CSS 无法穿透 iframe。这种情况只能找网站本身有没有关闭广告的选项。

搞定

现在你的桌面应用干净了。没有广告、没有多余侧边栏、没有弹窗。用户打开看到的就是你想要的界面。

下一章讲多平台打包,一次配置同时生成 Mac、Windows、Linux 安装包。

12. 多平台打包:一次配置,同时生成Mac、Windows和Linux安装包

一次命令,三平台安装包全出来

前面几章你都是在自己的电脑上打包,生成的文件只能给当前系统用。Mac 上打包出来的是 .dmg,Windows 上拿到没用。反过来也一样。

这一章要解决的问题:只跑一次命令,同时拿到 Mac、Windows、Linux 三个平台的安装包。这样你分享给朋友时,不管对方用什么系统,直接丢一个链接过去就行。

前置条件

  • 已经装好 Pake CLI(第 4 章的内容)
  • 已经用 CLI 成功打包过至少一次(第 5 章跑通了)
  • 电脑上装了 Git

第一步:看看当前能打哪些平台

先确认你的环境支持哪些目标平台:

pake --help

输出里找 --targets 参数。Pake 支持三个值:

  • darwin — macOS
  • windows — Windows
  • linux — Linux

默认只打当前系统的包。要一次打三个,得告诉它。

第二步:一次打包三个平台

拿你之前打包过的网址举例。假设你要把 https://www.your-tool.com 打成三个平台的安装包:

pake https://www.your-tool.com --targets darwin,windows,linux

跑完这条命令,Pake 会依次编译三个平台的二进制文件。第一次跑会比较慢,因为要下载各平台的依赖和工具链。耐心等,别中途 Ctrl+C。

预期结果:终端里会看到类似这样的输出:

Compiling for darwin...
Compiling for windows...
Compiling for linux...
Build complete!

第三步:找到生成的安装包

编译完成后,安装包默认放在当前目录下的 output 文件夹里:

output/
├── YourTool.dmg          # macOS 安装包
├── YourTool_x64.msi      # Windows 安装包
└── YourTool_x86_64.deb   # Linux 安装包

文件名里的 YourTool 是你打包时传入的应用名(默认取网址的主域名)。如果你用 --name 指定过名字,文件名会跟着变。

第四步:指定输出目录

不想让安装包散落在当前目录?加 --output 参数:

pake https://www.your-tool.com --targets darwin,windows,linux --output ./dist

这样所有安装包都进 dist 文件夹,干净。

常见问题

Q:在 Mac 上打 Windows 包,会不会报错?

会,如果你没装交叉编译工具。Pake 在 Mac 上默认只能打 Mac 的包。要打 Windows 包,需要装 mingw-w64

brew install mingw-w64

装完再跑上面的命令。Linux 同理,需要装对应的交叉编译链。

Q:在 Windows 上能打 Mac 包吗?

理论上可以,但非常麻烦,不推荐。建议在什么系统上就只打什么系统的包。如果你需要三个平台的安装包,有两个选择:

  1. 用 GitHub Actions(第 3 章讲过)自动在云端打三个平台
  2. 找一台 Mac 打 darwin,找一台 Windows 打 windows,找一台 Linux 打 linux

Q:打包出来的 .deb 能在 Ubuntu 上装吗?

可以。.deb 是 Debian/Ubuntu 系的安装包。如果你朋友用 Fedora 或 Arch,需要转成 .rpm.pkg.tar.zst。Pake 默认只打 .deb,要打其他格式需要自己改配置,初学者不建议折腾。

一个小技巧:用脚本一键打包

每次敲一长串参数很烦。写个脚本存起来:

#!/bin/bash
# build-all.sh

APP_URL="https://www.your-tool.com"
APP_NAME="MyTool"

pake $APP_URL \
  --name $APP_NAME \
  --targets darwin,windows,linux \
  --output ./dist

给执行权限:

chmod +x build-all.sh

以后要重新打包,直接:

./build-all.sh

搞定。三个平台的安装包一次生成,分享给任何人都不用问“你用啥系统”。

13. 常见问题排查:安装失败、白屏、打包报错怎么办

安装失败:先检查这几点

装不上 Pake 的原因 90% 是环境问题。先确认你的系统满足最低要求。

Mac 用户:需要 macOS 10.15 以上。打开终端跑:

sw_vers -productVersion

如果版本低于 10.15,升级系统再试。

Windows 用户:需要 Windows 10 1809 以上。按 Win + R,输入 winver,回车。看版本号。低于 1809 的话,先更新 Windows。

Linux 用户:需要 glibc 2.28 以上。跑:

ldd --version | head -n1

看到版本号低于 2.28,说明系统太老。Ubuntu 18.04 以下、CentOS 7 以下都不行。

安装 CLI 时报错 "command not found"

npm 装完 Pake 后,终端说找不到命令。这是 PATH 没配好。

先确认装上了:

npm list -g | grep pake

没输出?重新装:

npm install -g pake-cli

装上了但报错。Mac/Linux 用户跑:

echo $PATH | grep -o 'npm\|nvm'

如果没看到 npm 路径,把下面这行加到 ~/.bashrc~/.zshrc

export PATH="$HOME/.npm-global/bin:$PATH"

然后 source ~/.bashrc 或重启终端。

Windows 用户:用管理员身份打开 PowerShell,跑:

npm config set prefix "C:\Users\你的用户名\AppData\Roaming\npm"

重新装一次 pake-cli

打包时卡在 "Downloading Tauri dependencies"

Pake 底层依赖 Tauri,第一次打包要下载 Rust 工具链和 WebView2。网络慢或没翻墙会卡死。

Mac 用户:先装 Xcode Command Line Tools:

xcode-select --install

Windows 用户:手动装 WebView2。去微软官网搜 "WebView2 Runtime",下载安装。装完重启终端。

Linux 用户:装系统依赖。Ubuntu/Debian 跑:

sudo apt update
sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file libssl-dev libayatana-appindicator3-dev librsvg2-dev

Fedora 跑:

sudo dnf install webkit2gtk4.1-devel openssl-devel curl wget file libappindicator-gtk3-devel librsvg2-devel

装完再跑打包命令。

如果还是卡,手动指定 Rust 镜像源加速:

export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup

然后重新跑打包。

打包成功但应用白屏

应用能打开,窗口一片白。最常见的原因是目标网站屏蔽了 WebView 的 User-Agent。

先确认网站能不能正常访问。在浏览器打开目标网址,看看有没有登录墙或验证码。

如果网站正常,在打包命令里加 --user-agent 参数:

pake https://example.com --user-agent "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"

用你当前浏览器的 User-Agent。Chrome 里打开 chrome://version 就能看到。

另一个原因:网站用了 X-Frame-Options: DENY 头。这种网站不允许被嵌入。Pake 默认用 WebView 加载,会被拒绝。试试加 --insecure 参数绕过:

pake https://example.com --insecure

注意:这会让应用安全性降低,只对信任的网站用。

打包报错 "Error: EACCES: permission denied"

权限问题。Mac/Linux 上跑 npm 全局安装时常见。

别用 sudo npm install。正确做法是改 npm 全局目录权限:

mkdir -p ~/.npm-global
npm config set prefix '~/.npm-global'

然后把 ~/.npm-global/bin 加到 PATH(前面讲过)。重新装 Pake。

打包报错 "Error: Cannot find module 'pake-cli'"

装的是旧版 Pake,或者装错了包。Pake 的 npm 包名是 pake-cli,不是 pake

先卸载错的:

npm uninstall -g pake

再装对的:

npm install -g pake-cli

验证版本:

pake --version

看到版本号就对了。

打包报错 "Error: Rust not found"

Pake 打包需要 Rust 编译。没装 Rust 的话,先装:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

装完重启终端,跑 rustc --version 确认。

如果装了还报错,检查 Rust 是否在 PATH 里:

source $HOME/.cargo/env

或者把下面这行加到 shell 配置文件:

export PATH="$HOME/.cargo/bin:$PATH"

打包报错 "Error: WebView2 not found"(仅 Windows)

Windows 上 WebView2 没装或版本太旧。去微软官网下载 WebView2 Runtime 安装。

装完重启电脑。再跑打包。

如果还报错,手动指定 WebView2 路径:

set WEBVIEW2_LOADER_PATH="C:\Program Files (x86)\Microsoft\EdgeWebView\Application\*\EBWebView\"

路径里的星号换成实际版本号。

应用启动后闪退

闪退通常是因为目标网站加载了不兼容的 JavaScript 或资源太大。

先试试用 --debug 模式启动,看控制台输出:

pake https://example.com --debug

终端会打印错误信息。常见原因:

  • 网站用了 Service Worker,Pake 不支持。在打包命令加 --disable-service-worker
  • 网站内存占用过高。加 --memory-limit 512 限制内存为 512MB。
  • 网站需要登录,Cookie 没带过去。用 --cookie "key=value" 手动传。

打包后应用图标不显示

图标路径错了。Pake 支持 PNG、ICO、ICNS 格式。

检查图标文件是否存在:

ls -l /path/to/icon.png

文件存在但图标不显示?格式不对。Mac 用 ICNS,Windows 用 ICO,Linux 用 PNG。

用在线转换工具转一下格式。或者直接用 Pake 默认图标:

pake https://example.com --icon

不加 --icon 参数,Pake 会用内置默认图标。

打包报错 "Error: Target directory already exists"

输出目录已经有一个同名文件夹。Pake 不会覆盖。

两种处理方式:

  1. 删掉旧目录:rm -rf ./output-folder
  2. 指定新目录:pake https://example.com --target-dir ./new-output

打包报错 "Error: Failed to download Tauri binary"

网络问题。Tauri 二进制文件托管在 GitHub Releases,国内下载慢。

用代理:

export https_proxy=http://127.0.0.1:7890
export http_proxy=http://127.0.0.1:7890

端口换成你的代理端口。再跑打包。

没代理?手动下载。去 Tauri 的 GitHub Releases 页面下载对应系统的二进制,放到 ~/.pake/tauri-bin 目录。

应用打包成功但安装包打不开

安装包损坏或签名问题。

Mac:双击 dmg 提示 "已损坏"。跑:

sudo xattr -rd com.apple.quarantine /Applications/你的应用.app

Windows:msi 安装包提示 "发布者未知"。右键安装包 -> 属性 -> 勾选 "解除锁定" -> 确定。

Linux:deb 包安装失败。用命令行装:

sudo dpkg -i 你的应用.deb
sudo apt install -f

最后的手段:清缓存重试

折腾半天搞不定?从头来一遍干净的。

# 卸载 Pake
npm uninstall -g pake-cli

# 清 npm 缓存
npm cache clean --force

# 删掉 Pake 配置目录
rm -rf ~/.pake

# 重新安装
npm install -g pake-cli

然后重新跑打包命令。90% 的问题都能这样解决。

剩下的 10%?去 Pake 的 GitHub Issues 搜一下,大概率有人遇到过。搜不到就提 Issue,附上你的系统版本、Pake 版本、完整报错信息。

14. 完整项目实战:将你的博客或工具网站打包成桌面应用并分发

选一个真实项目,从头到尾跑一遍

前面十几章拆开了每个功能点。这一章把它们串起来——选一个真实的网站,打包成能分发给别人的桌面应用。

我拿自己的博客 https://yourblog.com 举例。你换成自己的网站就行。

第一步:确认环境就绪

先检查 CLI 能不能用:

pake --version

如果报 command not found,回到第4章装好。装完再跑一遍确认。

接着确认 Rust 环境:

rustc --version
cargo --version

缺哪个装哪个。Rust 官网一行命令搞定。

第二步:准备应用素材

你需要三样东西:

  1. 应用图标 — 1024x1024 的 PNG,透明背景最好。没有的话用 Canva 或随便找个在线工具生成一个。
  2. 应用名称 — 英文,比如 MyBlog。中文名后面可以改显示名称。
  3. 目标网址 — 你的博客首页 URL。

把图标文件放在一个干净目录,比如 ~/Desktop/pake-blog/

第三步:第一次打包,跑通基础版本

先不加任何定制参数,看看能不能跑起来:

pake https://yourblog.com --name MyBlog --icon ~/Desktop/pake-blog/icon.png

这条命令会:

  • 拉取 Pake 的模板代码
  • 把你的网址嵌进去
  • 编译成桌面应用
  • 输出安装包到当前目录

第一次编译比较慢,3-5 分钟正常。Tauri 要下载一堆依赖。

看到 Build complete 就成功了。安装包在 MyBlog_x64.dmg(Mac)或 MyBlog_x64.msi(Windows)或 MyBlog_x86_64.deb(Linux)。

双击安装,打开看看。你的博客应该直接显示在窗口里。

第四步:调整窗口行为

博客默认打开可能窗口太小。加几个参数:

pake https://yourblog.com --name MyBlog --icon ~/Desktop/pake-blog/icon.png --width 1200 --height 800 --fullscreen

--fullscreen 让应用启动时全屏。不想全屏就删掉这个参数,只保留宽高。

试一下:卸载之前装的版本,重新安装新包。启动后窗口应该是 1200x800。

第五步:加快捷键

博客里常用的操作:刷新、返回顶部、退出。

pake https://yourblog.com --name MyBlog --icon ~/Desktop/pake-blog/icon.png --width 1200 --height 800 --shortcuts "Ctrl+R=reload;Ctrl+Q=quit;Ctrl+T=scroll_top"

快捷键格式:按键=动作,多个用分号隔开。

支持的动作用 pake --help 查看。常用的:

  • reload — 刷新页面
  • quit — 退出应用
  • scroll_top — 滚到顶部
  • scroll_bottom — 滚到底部
  • devtools — 打开开发者工具

第六步:去掉博客里多余的页面元素

博客一般有导航栏、侧边栏、页脚。在桌面应用里这些占空间,可以隐藏。

先建一个 CSS 文件 style.css

/* 隐藏导航栏 */
header, nav, .navbar, #header {
    display: none !important;
}

/* 隐藏侧边栏 */
aside, .sidebar, #sidebar {
    display: none !important;
}

/* 隐藏页脚 */
footer, .footer, #footer {
    display: none !important;
}

/* 让主内容区占满窗口 */
main, .main, #main, article, .content {
    max-width: 100% !important;
    margin: 0 !important;
    padding: 16px !important;
}

选择器要根据你博客的实际 HTML 结构调整。打开浏览器开发者工具,找到要隐藏的元素,把 class 或 id 写进去。

然后打包时引用这个文件:

pake https://yourblog.com --name MyBlog --icon ~/Desktop/pake-blog/icon.png --width 1200 --height 800 --shortcuts "Ctrl+R=reload;Ctrl+Q=quit;Ctrl+T=scroll_top" --style ~/Desktop/pake-blog/style.css

第七步:启用沉浸式窗口

去掉浏览器边框,更像原生应用:

pake https://yourblog.com --name MyBlog --icon ~/Desktop/pake-blog/icon.png --width 1200 --height 800 --shortcuts "Ctrl+R=reload;Ctrl+Q=quit;Ctrl+T=scroll_top" --style ~/Desktop/pake-blog/style.css --transparent

--transparent 启用沉浸式窗口。注意:有些系统上透明窗口需要额外配置,如果报错就去掉这个参数。

第八步:多平台打包

你在一台 Mac 上打包,默认只出 Mac 安装包。要同时出 Windows 和 Linux 的,加 --targets 参数:

pake https://yourblog.com --name MyBlog --icon ~/Desktop/pake-blog/icon.png --width 1200 --height 800 --shortcuts "Ctrl+R=reload;Ctrl+Q=quit;Ctrl+T=scroll_top" --style ~/Desktop/pake-blog/style.css --transparent --targets all

--targets all 会生成三个平台的安装包。编译时间会翻倍,因为要交叉编译。

如果只想出 Windows 和 Mac:

--targets "nsis,dmg"

支持的格式:dmg(Mac)、nsismsi(Windows)、debappimage(Linux)。

第九步:分发应用

打包完成后,当前目录下会有这些文件:

MyBlog_x64.dmg          # Mac 安装包
MyBlog_x64.msi          # Windows 安装包  
MyBlog_x86_64.deb       # Linux 安装包

分发方式:

给朋友/同事:直接发安装包文件。Mac 用户双击 dmg 拖到 Applications 文件夹。Windows 用户双击 msi 安装。

上传到 GitHub Releases

  1. 在 GitHub 上创建仓库
  2. 打一个 tag:git tag v1.0.0 && git push origin v1.0.0
  3. 在仓库页面点 Releases → Draft a new release
  4. 选刚打的 tag
  5. 把三个安装包拖进去
  6. 写版本说明,发布

用户就能从 Releases 页面下载了。

自建下载页:用 GitHub Pages 或任何静态托管,放个下载链接:

<a href="https://github.com/你的用户名/仓库名/releases/latest/download/MyBlog_x64.dmg">下载 Mac 版</a>
<a href="https://github.com/你的用户名/仓库名/releases/latest/download/MyBlog_x64.msi">下载 Windows 版</a>
<a href="https://github.com/你的用户名/仓库名/releases/latest/download/MyBlog_x86_64.deb">下载 Linux 版</a>

常见问题

打包报错 error: failed to run custom build command
Rust 环境缺依赖。Mac 上装 Xcode Command Line Tools:xcode-select --install。Windows 上装 Visual Studio Build Tools。

应用打开后白屏
网址写错了,或者网站有反爬机制。先在浏览器里打开确认能访问。有些网站需要登录,Pake 默认不保存登录状态,可以加 --user-agent 参数伪装成浏览器。

安装包太大
正常应该在 5-10MB。如果超过 20MB,检查是不是把整个 node_modules 打包进去了。Pake 本身很轻,大是因为你引用了外部资源。

Windows 安装包被杀毒软件拦截
Tauri 打包的应用签名问题。可以买个代码签名证书,或者告诉用户临时关掉杀毒软件。

最终命令(可直接复制)

把你博客的 URL、图标路径、CSS 文件路径替换成自己的,直接跑:

pake https://yourblog.com \
  --name MyBlog \
  --icon ~/Desktop/pake-blog/icon.png \
  --width 1200 \
  --height 800 \
  --shortcuts "Ctrl+R=reload;Ctrl+Q=quit;Ctrl+T=scroll_top" \
  --style ~/Desktop/pake-blog/style.css \
  --transparent \
  --targets all

等编译完成,你的博客桌面应用就做好了。安装、打开、用。

常見問題

问题 1:安装 Pake CLI 时提示 rustccargo 未找到,怎么办?

Pake CLI 依赖 Rust 工具链。请先安装 Rust:访问 rustup.rs 并执行安装命令。安装完成后,重新打开终端并运行 cargo install pake-cli。如果仍报错,请确保系统已安装 cmakeopenssl 等基础依赖(Linux 下可用包管理器安装,如 sudo apt install cmake libssl-dev)。

问题 2:打包时提示 Error: failed to run custom build command for 'tauri',如何解决?

这通常是系统缺少 Tauri 所需的原生依赖。请根据你的操作系统安装对应依赖:

  • macOS:安装 Xcode Command Line Tools(xcode-select --install)。
  • Windows:安装 Microsoft Visual Studio Build Tools 或 Visual Studio(勾选“使用 C++ 的桌面开发”工作负载)。
  • Linux:安装 libgtk-3-devlibwebkit2gtk-4.0-devlibappindicator3-dev 等(Ubuntu/Debian 示例:sudo apt install libgtk-3-dev libwebkit2gtk-4.0-dev libappindicator3-dev)。

问题 3:生成的桌面应用窗口无法正常显示网页内容,只显示空白或加载失败?

请检查目标网页是否允许被嵌入(例如某些网站设置了 X-Frame-OptionsContent-Security-Policy 限制)。Pake 默认使用 WebView 渲染,部分网站可能拒绝加载。你可以尝试在打包命令中添加 --inject 参数注入自定义脚本绕过限制,或更换为其他兼容的网页。

问题 4:如何自定义应用图标和窗口标题?

使用 Pake CLI 打包时,通过以下参数指定:

pake https://example.com --icon ./my-icon.png --name "MyApp"
  • --icon:支持 PNG、ICO 等格式,建议尺寸 512x512 以上。
  • --name:设置应用名称和窗口标题。

如果使用在线构建(GitHub Actions),在配置文件中填写对应字段即可。

问题 5:Pake 和 Electron 相比,主要区别是什么?

Pake 基于 Rust Tauri,生成的安装包通常小于 10MB(Electron 动辄 100MB+),内存占用更低,启动速度更快。但 Pake 的功能相对精简,不支持 Electron 的完整 Node.js 生态和原生模块。如果你需要复杂的桌面功能(如文件系统、系统托盘深度定制),Electron 更合适;如果只是将网页打包成轻量桌面应用,Pake 是更好的选择。

问题 6:打包后的应用在 macOS 上无法打开,提示“已损坏,无法打开”?

这是 macOS Gatekeeper 的安全限制。请尝试以下方法:

  1. 在“系统设置” > “隐私与安全性”中,点击“仍要打开”。
  2. 如果无效,在终端运行 sudo xattr -rd com.apple.quarantine /Applications/YourApp.app
  3. 或者重新签名应用:codesign --force --deep --sign - /Applications/YourApp.app

问题 7:如何移除网页中的广告或自定义样式?

Pake 支持通过 --inject 参数注入 CSS 或 JavaScript 脚本。例如,创建一个 style.css 文件:

.ad-banner { display: none !important; }

然后打包时使用:

pake https://example.com --inject ./style.css

你也可以注入 JS 脚本(如 --inject ./script.js)来修改 DOM 或拦截请求。

问题 8:Pake 支持哪些快捷键?如何自定义?

默认支持的快捷键包括:

  • Ctrl+W / Cmd+W:关闭窗口
  • Ctrl+R / Cmd+R:刷新页面
  • Ctrl+Shift+I / Cmd+Option+I:打开开发者工具

目前快捷键暂不支持自定义,但你可以通过修改源码(src-tauri/src/main.rs)中的快捷键绑定来实现。如果你需要更灵活的快捷键配置,建议关注项目后续更新或提交 Feature Request。

🔗 相關推薦

📦 相關專案