用Pake把任意网页变成桌面应用
Pake是一个基于Rust Tauri的轻量级工具,能将任何网页一键打包成桌面应用,安装包比Electron小20倍。读完本教程,你将学会直接使用现成应用、在线构建、命令行打包,以及自定义样式和快捷键。
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 搞定。
- 你常用某个在线工具,但不想被浏览器其他标签页分心——给它一个独立的壳。
怎么用?
三种方式,看你是什么角色:
- 纯用户:去 GitHub Releases 页面,下载现成的安装包。装完就用,什么都不用配。
- 想自己打包:用 GitHub Actions 在线构建,不用装任何软件。把网址填进去,等几分钟,安装包就出来了。
- 开发者:装 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应用
这一章的目标:不装任何软件,不写一行代码,直接拿到一个能用的桌面应用。
你不需要懂Rust、Tauri、命令行。只要会点鼠标、会下载文件就行。
先搞清楚你的操作系统
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 用户:
- 双击下载的
.dmg文件 - 把弹出的应用图标拖进 Applications 文件夹
- 去启动台找到它,双击打开
第一次打开可能会提示“无法验证开发者”。别慌:
- 去 系统设置 → 隐私与安全性,往下翻
- 看到“已阻止使用...”那行,点 仍要打开
Windows 用户:
- 双击
.msi文件 - 一路点 Next,装完桌面上就有图标了
- 双击运行
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。它的工作方式很简单:
整个过程你本地什么都不用装。连命令行都不用碰。
第一步: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-cliWindows 用户用管理员身份打开 PowerShell 再装。
装 Rust 环境(这一步不能省)
Pake 底层用 Rust 编译,CLI 只是帮你调用了 Rust 的构建工具。所以你还得装 Rust。
去 rustup.rs 复制那行安装命令,或者直接敲:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shMac/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.comRust 的依赖慢的话,在 ~/.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 会自动拉取网页内容,编译成桌面应用。第一次跑会下载 Rust 和 Tauri 的依赖,大概 1-3 分钟,取决于网速。
预期结果:终端开始滚动输出,最后出现一行类似 Finished 或 Build 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.kitchen 或 Canva 在线生成一个。或者直接用你网站的 favicon,大多数网站都有。
假设你有一张图叫 my-app-icon.png,放在当前目录下。
第二步:带参数打包
直接跑这条命令:
pake https://www.your-site.com --name "我的应用" --icon ./my-app-icon.png--name 后面跟应用名,可以用中文。--icon 后面跟图标文件的路径。
预期结果:打包过程跟之前一样,但生成的安装包文件名变成了 我的应用.dmg(Mac)或 我的应用_x64.msi(Windows)。安装后,应用名称和图标都变成了你指定的。
第三步:验证效果
安装刚打包的应用。打开后,看三个地方:
- Dock 栏或任务栏:图标是不是你那张图
- 应用菜单:顶部菜单栏显示的应用名是不是你写的名字
- 关于本应用:Mac 上点菜单栏的应用名 → "关于",Windows 上右键任务栏图标 → "属性"
如果这三个地方都对上了,搞定。
常见坑和排查
图标没变,还是 Pake 默认图标?
检查图标文件路径。用绝对路径最保险:
pake https://www.your-site.com --name "我的应用" --icon /Users/你的用户名/Desktop/my-app-icon.pngWindows 用户注意路径里的反斜杠要转义,或者直接用正斜杠:
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 做成桌面应用,叫 "我的笔记",用一张蓝色笔记本图标。
- 准备图标:找一张 1024x1024 的 PNG,命名为
notebook-icon.png - 跑命令:
pake https://www.notion.so --name "我的笔记" --icon ./notebook-icon.png- 等几分钟,安装包生成在
output目录下 - 安装,打开,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 打包出来的应用带着浏览器那套东西——地址栏、标签栏、菜单栏。一眼就能看出是网页套壳。沉浸式窗口就是把这些全砍掉,只留网页内容本身,看起来跟原生桌面软件一模一样。
先看看效果:运行一个带沉浸式窗口的应用,窗口里只有你的网页内容,没有地址栏,没有菜单栏,连窗口标题栏都变成网页自己的了。鼠标移到窗口顶部才能看到系统级的关闭、最小化按钮。这才是桌面应用该有的样子。
前置条件
第一步:加一个参数
在打包命令里加上 --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 |
刷新页面 |
Mac 上 Cmd 对应 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注意按键名要写标准名称:KeyA、Digit1、F1 这种,别写 a、1。
实际场景:给笔记应用配一套快捷键
假设你打包了一个笔记工具,想要:
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"常见问题
快捷键没反应?
先检查两件事:
- 快捷键是否被系统或其他应用占用了。比如 Mac 上
Cmd+Q是系统级退出快捷键,Pake 能覆盖它,但某些系统快捷键(如Cmd+Tab)抢不过。 - 确认你用的功能标识符拼写正确。
quit不是exit,reload不是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,可能是你改完配置后没重新安装,旧版本还在用。
拖拽时鼠标指针显示禁止符号
说明网页应用没有正确处理 dragover 和 drop 事件。这不是 Pake 的问题,是网页本身不支持拖拽。你可以换个支持拖拽的网站测试,比如 remove.bg 或 tinyjpg.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 --help输出里找 --targets 参数。Pake 支持三个值:
darwin— macOSwindows— Windowslinux— 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 包吗?
理论上可以,但非常麻烦,不推荐。建议在什么系统上就只打什么系统的包。如果你需要三个平台的安装包,有两个选择:
- 用 GitHub Actions(第 3 章讲过)自动在云端打三个平台
- 找一台 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 --installWindows 用户:手动装 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-devFedora 跑:
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 不会覆盖。
两种处理方式:
- 删掉旧目录:
rm -rf ./output-folder - 指定新目录:
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/你的应用.appWindows: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 官网一行命令搞定。
第二步:准备应用素材
你需要三样东西:
- 应用图标 — 1024x1024 的 PNG,透明背景最好。没有的话用 Canva 或随便找个在线工具生成一个。
- 应用名称 — 英文,比如
MyBlog。中文名后面可以改显示名称。 - 目标网址 — 你的博客首页 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)、nsis 或 msi(Windows)、deb 或 appimage(Linux)。
第九步:分发应用
打包完成后,当前目录下会有这些文件:
MyBlog_x64.dmg # Mac 安装包
MyBlog_x64.msi # Windows 安装包
MyBlog_x86_64.deb # Linux 安装包分发方式:
给朋友/同事:直接发安装包文件。Mac 用户双击 dmg 拖到 Applications 文件夹。Windows 用户双击 msi 安装。
上传到 GitHub Releases:
- 在 GitHub 上创建仓库
- 打一个 tag:
git tag v1.0.0 && git push origin v1.0.0 - 在仓库页面点 Releases → Draft a new release
- 选刚打的 tag
- 把三个安装包拖进去
- 写版本说明,发布
用户就能从 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 时提示 rustc 或 cargo 未找到,怎么办?
Pake CLI 依赖 Rust 工具链。请先安装 Rust:访问 rustup.rs 并执行安装命令。安装完成后,重新打开终端并运行 cargo install pake-cli。如果仍报错,请确保系统已安装 cmake 和 openssl 等基础依赖(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-dev、libwebkit2gtk-4.0-dev、libappindicator3-dev等(Ubuntu/Debian 示例:sudo apt install libgtk-3-dev libwebkit2gtk-4.0-dev libappindicator3-dev)。
问题 3:生成的桌面应用窗口无法正常显示网页内容,只显示空白或加载失败?
请检查目标网页是否允许被嵌入(例如某些网站设置了 X-Frame-Options 或 Content-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 的安全限制。请尝试以下方法:
- 在“系统设置” > “隐私与安全性”中,点击“仍要打开”。
- 如果无效,在终端运行
sudo xattr -rd com.apple.quarantine /Applications/YourApp.app。 - 或者重新签名应用:
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。