

























今天在 GitHub Trending 上看到一个有意思的项目:Pake,它能用一条命令将任意网页打包成桌面应用,体积只有 Electron 的 1/20,堪称网页应用桌面化的利器。
Pake 是一个开源的桌面应用打包工具,核心理念是"用最简单的方式将网页变成桌面应用"。相比传统的 Electron 方案,Pake 基于 Rust 的 Tauri 框架构建,具有以下核心特性:
Pake 支持三大主流操作系统(macOS、Windows、Linux),开发者无需维护多套代码,一次打包即可生成跨平台应用。项目由阿里前端工程师 tw93 开发维护,在 GitHub 上已获得广泛关注。
Pake 的技术架构基于 Tauri v2,这是 Rust 生态中最成熟的桌面应用框架之一。整体架构可以分为三层:
WebView 层:使用操作系统自带的 WebView 组件渲染网页内容
Rust 后端层:处理原生功能,如文件系统访问、系统托盘、窗口管理等
前端桥接层:通过 Tauri 的 IPC 机制实现 JavaScript 与 Rust 的通信
这种架构的优势在于:
从 package.json 可以看到 Pake 的核心依赖:
{
"name": "pake-cli",
"version": "3.11.10",
"engines": {
"node": ">=18.0.0"
},
"dependencies": {
"@tauri-apps/api": "~2.10.1",
"@tauri-apps/cli": "^2.10.0",
"commander": "^14.0.3",
"execa": "^9.6.1",
"sharp": "^0.34.5"
}
}
选型分析:
从 Dockerfile 可以看到完整的构建流程:
# Rust 编译阶段
FROM rust:latest AS cargo-builder
RUN rustup update stable && rustup default stable
# 安装 Linux 依赖:WebKit、GTK、OpenSSL 等
RUN apt-get install -y libwebkit2gtk-4.1-dev libgtk-3-dev libssl-dev
# Node.js 构建阶段
FROM rust:latest AS builder
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
RUN npm install -g pnpm
RUN pnpm install --frozen-lockfile && pnpm run cli:build
构建过程采用多阶段构建:
Pake 提供了一个实用的图标转换脚本 icns2png.py:
from PIL import Image
for file in file_list:
image = Image.open(icns_path)
# 生成三种尺寸:512x512、256x256、32x32
image_512 = image.copy().resize((512, 512))
image_256 = image.copy().resize((256, 256))
image_32 = image.copy().resize((32, 32))
# PNG 用于 Linux/Windows,ICO 用于 Windows
image_512.save(image_512_path, "PNG")
image_256.save(image_256_path, "ICO")
这确保了生成的应用在不同平台都有合适的图标格式。
方式一:全局安装 CLI(开发者推荐)
# 使用 pnpm 安装
pnpm install -g pake-cli
# 或使用 npm
npm install -g pake-cli
方式二:下载预编译应用(普通用户)
直接从 GitHub Releases 下载已打包好的热门应用,如微信读书、Twitter、ChatGPT、DeepSeek 等。
# 基础用法 - 自动抓取网站图标
pake https://github.com --name GitHub
# 高级用法 - 自定义图标和窗口尺寸
pake https://weekly.tw93.fun \
--name Weekly \
--icon https://cdn.tw93.fun/pake/weekly.icns \
--width 1200 \
--height 800 \
--hide-title-bar
首次打包需要编译 Rust 代码,耗时较长;后续构建会复用缓存,速度大幅提升。
1. 打包任意网站
pake <url> --name <app-name>
Pake 会自动:
2. 自定义图标
pake https://twitter.com --name Twitter \
--icon ./twitter-icon.png
支持 PNG、ICNS(macOS)、ICO(Windows)等格式。
3. 调整窗口属性
pake https://youtube.com --name YouTube \
--width 1280 \
--height 720 \
--transparent \
--resizable
1. 沉浸式窗口
隐藏标题栏,打造类似原生应用的体验:
pake https://notion.so --name Notion \
--hide-title-bar \
--transparent
2. 注入自定义样式
通过 --inject-css 注入自定义 CSS:
pake https://example.com --name MyApp \
--inject-css ./custom.css
可以用来隐藏广告、调整布局、修改主题等。
3. GitHub Actions 在线构建
无需本地环境,直接在 GitHub 上构建:
Pake 为所有打包的应用内置了丰富的快捷键:
| 功能 | macOS | Windows/Linux |
|---|---|---|
| 后退 | ⌘ + [ | Ctrl + ← |
| 前进 | ⌘ + ] | Ctrl + → |
| 刷新 | ⌘ + R | Ctrl + R |
| 缩放 | ⌘ + +/- | Ctrl + +/- |
| 复制 URL | ⌘ + L | Ctrl + L |
| 清除缓存 | ⌘ + ⇧ + ⌫ | Ctrl + ⇧ + Del |
Pake 官方提供了多款热门应用的预编译版本:
直接从 Releases 页面下载对应平台的安装包即可使用。
问题:Rust 版本过低
error: Rust 1.85 required, found 1.70
解决方案:
# 更新 Rust 到最新稳定版
rustup update stable
rustup default stable
问题:Linux 缺少系统依赖
error: Package 'webkit2gtk-4.1' not found
解决方案:
# Ubuntu/Debian
sudo apt-get install -y \
libwebkit2gtk-4.1-dev \
libgtk-3-dev \
libayatana-appindicator3-dev \
librsvg2-dev
# Fedora
sudo dnf install \
webkit2gtk4.1-devel \
gtk3-devel \
libappindicator-gtk3-devel
问题:macOS 提示"无法验证开发者"
"App" is damaged and can't be opened.
解决方案:
# 移除隔离属性
xattr -cr /Applications/YourApp.app
或在系统设置中允许第三方应用。
问题:Windows SmartScreen 拦截
点击"更多信息" → “仍要运行”,或使用代码签名证书签名应用。
问题:首次打包时间长
首次构建需要编译 Rust 代码,可能需要 5-10 分钟。建议:
问题:应用内存占用高
Pake 应用内存占用通常在 100-300MB,远低于 Electron(通常 500MB+)。如果仍然过高:
--disable-gpu 禁用硬件加速支持的平台:
不支持的场景:
Pake 是一个优雅的"网页桌面化"解决方案,它巧妙地结合了 Rust 的性能优势和 WebView 的轻量特性,让开发者能够用一条命令将任意网页变成原生体验的桌面应用。
相比 Electron,Pake 的体积优势显著(5MB vs 100MB+),内存占用更低,启动更快。相比原生开发,Pake 的学习成本几乎为零——只要你有一个网页,就能拥有一个桌面应用。
无论是开发者想要为自己的 Web 应用提供桌面版本,还是普通用户想要将常用网站变成独立应用,Pake 都是一个值得尝试的选择。项目的开源特性和活跃的社区支持,也让它成为学习 Tauri 和 Rust 桌面开发的优秀范例。
GitHub 地址: https://github.com/tw93/Pake
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。