惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
Google Online Security Blog
Google Online Security Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Simon Willison's Weblog
Simon Willison's Weblog
T
Threat Research - Cisco Blogs
C
CXSECURITY Database RSS Feed - CXSecurity.com
L
Lohrmann on Cybersecurity
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Forbes - Security
Forbes - Security
P
Palo Alto Networks Blog
Schneier on Security
Schneier on Security
S
Schneier on Security
T
Tor Project blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
WordPress大学
WordPress大学
The Hacker News
The Hacker News
Hacker News - Newest:
Hacker News - Newest: "LLM"
罗磊的独立博客
Application and Cybersecurity Blog
Application and Cybersecurity Blog
F
Fortinet All Blogs
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
C
Check Point Blog
Stack Overflow Blog
Stack Overflow Blog
Blog — PlanetScale
Blog — PlanetScale
雷峰网
雷峰网
S
Security @ Cisco Blogs
PCI Perspectives
PCI Perspectives
Spread Privacy
Spread Privacy
W
WeLiveSecurity
SecWiki News
SecWiki News
A
About on SuperTechFans
H
Help Net Security
博客园 - 司徒正美
Recent Commits to openclaw:main
Recent Commits to openclaw:main
爱范儿
爱范儿
S
Securelist
M
MIT News - Artificial intelligence
云风的 BLOG
云风的 BLOG
月光博客
月光博客
Jina AI
Jina AI
博客园 - 叶小钗
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
Recent Announcements
Recent Announcements
S
Secure Thoughts
The Cloudflare Blog
美团技术团队
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - zhang-yd

今日开源[第33期] Home Assistant Core 今日开源[第32期] Vibe-Trading 今日开源[第31期]RuView 今日开源[第30期]Chrome DevTools MCP 今日开源[第29期]RomM (ROM Manager) 今日开源[第28期]Page Agent 今日开源[第27期]video-use 今日开源[第26期]SimpleX Chat 今日开源[第25期]LingBot-Map 今日开源[第24期]OpenMontage 今日开源[第23期]Voicebox 今日开源[第21期]yifanfeng97/Hyper-Extract 今日开源[第20期]google-research/timesfm 今日开源[第19期]Panniantong/Agent-Reach 今日开源[第18期]karpathy/autoresearch 今日开源[第17期]public-domain-books-translation 今日开源[第16期]soxoj/maigret 论文解读-《Dual-Kernel Graph Community Contrastive Learning》 今日开源[第15期]agent-skills 论文解读-《Hyperbolic Continuous Structural Entropy for Hierarchical Clustering》 今日开源[第14期]google/skills 今日开源[第13期]turbovec 今日开源[第12期]LiteParse 今日开源[第11期]OmniVoice-Studio 今日开源[第10期]ds4(DwarfStar) 今日开源[第9期]graphify 今日开源[第8期]open-notebook 今日开源[第7期]spec-kit 今日开源[第6期]Production Agentic RAG Course 今日开源[第5期]Headroom 今日开源[第4期]OpenTalking 今日开源[第3期]train-llm-from-scratch 今日开源[第2期]Project N.O.M.A.D. 今日开源[第1期]MoneyPrinterTurbo LearningCell代码解读 论文解读-《It Takes a Graph to Know a Graph Rewiring for Homophily with a Reference Graph》 论文解读-《Mitigating Over-Squashing in Graph Neural Networks by Spectrum-Preserving Sparsification》 论文解读-《Make Heterophily Graphs Better Fit GNN A Graph Rewiring Approach》 论文解读-《Temporal Graph Rewiring with Expander Graphs 》 论文解读-《Understanding Oversquashing in GNNs through the Lens of Effective Resistance》 论文解读-《Homophily-oriented Heterogeneous Graph Rewiring》 论文-Deep appearance modeling: A survey 代码阅读笔记-nanoclaw 代码阅读笔记-OpenManus 论文解读-《An Empirical Evaluation of Rewiring Approaches in Graph Neural Networks》 论文解读-《Probabilistic Graph Rewiring via Virtual Nodes》 论文解读-《Probabilistically Rewired Message-Passing Neural Networks》 论文解读-《Joint Graph Rewiring and Feature Denoising via Spectral Resonance》 代码阅读笔记-nanobot 论文解读-《Oversquashing in GNNs through the lens of information contraction and graph expansion》 论文解读-《GNNs Getting ComFy Community and Feature Similarity Guided Rewiring》 论文解读-《PANDA Expanded Width-Aware Message Passing Beyond Rewiring》 代码阅读笔记-AiPyApp 论文解读-《Deep Graph Contrastive Representation Learning》 论文解读-《Community-Invariant Graph Contrastive Learning》 论文解读-《DiffWire Inductive Graph Rewiring via the Lovász Bound》 论文解读-《The Effectiveness of Curvature-Based Rewiring and the Role of Hyperparameters in GNNs Revisited》 论文解读-《Over-Squashing in GNNs and Causal Inference of Rewiring Strategies》 论文解读-《Uncertainty-Aware Graph Structure Learning》
今日开源[第22期]tw93/Pake
zhang-yd · 2026-06-22 · via 博客园 - zhang-yd

tw93/Pake 项目分析

分析日期:2026-06-22
项目地址:https://github.com/tw93/Pake


一、项目介绍

1.1 项目概述

Pake 是由 tw93(汤威,阿里前端工程师,妙言/Miaoyan、潮流周刊、XRender 的作者)开发的开源工具,口号是 "一键打包网页生成轻量桌面应用"(Turn any webpage into a desktop app with one command)。它基于 Rust + Tauri 框架,能够将任意网页快速打包成 macOS、Windows、Linux 三平台的桌面应用。

Pake 的核心价值在于用一条命令替代传统 Electron 开发的繁琐流程,打包产物仅约 5MB,体积比 Electron 小近 20 倍,同时内存占用更低、启动速度更快。

1.2 项目地址与官网

项目 链接
GitHub 仓库 https://github.com/tw93/Pake
作者 tw93(汤威)
许可证 GPL-3.0(附带 Pake Output Exception,打包产出的应用归用户所有)
当前版本 V3.12.0(2026-06-21 发布)
编程语言 Rust (94.1%)、Dockerfile (5.3%)、TypeScript (0.6%)

1.3 项目状态

  • Stars:约 54,647(截至 2026-06-22)
  • 提交数:2,145 次
  • Releases:47 个版本
  • 持续活跃更新中

1.4 项目示意图

README 中提供了多张截图:

  • 各平台打包产物的 Dock/任务栏展示效果
  • 预设常用应用(微信、ChatGPT、DeepSeek、YouTube 等)的桌面端截图
  • CLI 命令行打包过程截图
  • 沉浸式窗口(macOS 隐藏标题栏)效果对比

二、项目亮点

2.1 核心亮点

亮点 说明
体积小巧 打包后通常仅约 5MB,比 Electron 打包小近 20 倍
性能优异 基于 Rust Tauri,使用系统原生 WebView,内存占用更低,启动更快
使用简单 一条命令即可打包,无需复杂配置;也支持 GitHub Actions 在线构建
功能丰富 支持快捷键透传、沉浸式窗口、拖拽、样式定制、去广告等
跨平台覆盖 macOS(Intel/Apple Silicon)、Windows(x64/ARM64)、Linux(deb/rpm/AppImage)全支持
社区活跃 54k+ Star,2,145 次提交,47 个版本持续迭代

2.2 主要功能

功能 说明
命令行一键打包 pake <url> --name <name>
自动获取网站图标 无需手动指定 icon
自定义窗口参数 宽高、全屏、最大化、最小尺寸、缩放级别
沉浸式标题栏(macOS) --hide-title-bar
系统托盘 --show-system-tray--start-to-tray
无痕/隐私模式 --incognito
多实例/多窗口 --multi-instance--multi-window
CSS/JS 注入 --inject 自定义样式和脚本
广告去除 通过注入 CSS 隐藏广告元素
代理支持 HTTP/HTTPS/SOCKS5 代理
WASM 支持 --wasm 支持 Flutter Web 等场景
拖拽支持 --enable-drag-drop
macOS 权限 支持 --camera--microphone
本地文件打包 --use-local-file 打包本地 HTML 应用
在线构建 通过 GitHub Actions 无需本地环境即可打包

2.3 快捷键一览

Mac Windows/Linux 功能
⌘ + [ Ctrl + ← 返回上一页
⌘ + ] Ctrl + → 前进下一页
⌘ + ↑ Ctrl + ↑ 滚动到页面顶部
⌘ + ↓ Ctrl + ↓ 滚动到页面底部
⌘ + r Ctrl + r 刷新页面
⌘ + w Ctrl + w 隐藏窗口(非退出)
⌘ + - Ctrl + - 缩小页面
⌘ + = Ctrl + = 放大页面
⌘ + 0 Ctrl + 0 重置缩放
⌘ + L Ctrl + L 复制当前 URL
⌘ + ⇧ + ⌥ + V Ctrl + Shift + V 粘贴并匹配样式
⌘ + ⇧ + H Ctrl + Shift + H 回到首页
⌘ + ⌥ + I Ctrl + Shift + I 开发者工具(仅 Debug 模式)
⌘ + ⇧ + ⌫ Ctrl + Shift + Del 清除缓存并重启

双标题栏可切换全屏,Mac 支持手势前进/后退,拖拽标题栏移动窗口。

2.4 预设常用应用列表

通过 default_app_list.json 定义,共 15 个应用,可在 Release 页面直接下载:

编号 应用名称 类型 URL
1 WeChat(微信) 社交 wx.qq.com
2 DeepSeek AI chat.deepseek.com
3 Grok AI grok.com
4 Gemini AI gemini.google.com
5 ChatGPT AI chatgpt.com
6 Twitter(推特) 社交 x.com
7 YouTube 视频 youtube.com
8 YouTube Music 音乐 music.youtube.com
9 WeRead(微信读书) 阅读 weread.qq.com
10 XiaoHongShu(小红书) 社交 xiaohongshu.com
11 Excalidraw 工具 excalidraw.com
12 ProgramMusic 音乐 musicforprogramming.net
13 LiZhi(李志) 音乐 lizhi.dengdengju.com
14 Flomo(浮墨) 笔记 v.flomoapp.com
15 Qwerty 工具 qwerty.kaiyi.cool

三、项目运行环境与运行条件

3.1 技术栈

层级 技术
后端框架 Tauri 2.x(Rust)
CLI 工具 TypeScript + Node.js,使用 Rollup 打包
包管理 pnpm 10.x
WebView 渲染 系统原生 WebView(macOS: WKWebView、Windows: WebView2、Linux: WebKitGTK)
图标处理 sharp、icon-gen
CLI 框架 commander
测试 vitest
代码格式化 prettier、cargo fmt

3.2 运行环境要求

依赖 最低版本 说明
Node.js >= 18.0.0(推荐 >= 22.0.0 LTS) CLI 运行环境
Rust >= 1.85.0 Tauri 编译环境(CLI 会自动尝试安装)
pnpm >= 10.x 包管理器
macOS Xcode Command Line Tools xcode-select --install
Windows Visual Studio Build Tools 2022 (>=17.2) + Windows 10 SDK 需要 C++ 构建工具
Linux libwebkit2gtk-4.1-dev、libgtk-3-dev 等 多个系统依赖包

3.3 关键依赖

运行时依赖

  • @tauri-apps/api ~2.10.1
  • @tauri-apps/cli ^2.10.0

CLI 依赖

  • commander ^14.0.3:命令行参数解析
  • chalk ^5.6.2:终端彩色输出
  • ora ^9.3.0:终端加载动画
  • execa ^9.6.1:子进程管理
  • sharp ^0.34.5:图标处理
  • icon-gen ^5.0.0:图标生成
  • file-type ^21.3.0:文件类型检测

3.4 安装方式

# 安装 CLI(全局)
pnpm install -g pake-cli

# 或从源码使用
git clone https://github.com/tw93/Pake.git
cd Pake
pnpm i
pnpm run dev          # 本地开发(右键打开调试)
pnpm run build        # 打包应用

3.5 使用示例

# 基础打包(自动获取网站图标)
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

# 沉浸式窗口 + 系统托盘
pake https://chat.deepseek.com --name DeepSeek \
  --hide-title-bar --show-system-tray

# 无痕模式
pake https://x.com --name Twitter --incognito

# 打包本地文件
pake ./dist --name MyApp --use-local-file

四、项目代码介绍

4.1 代码架构图

Pake/
├── bin/                        # CLI 源码(TypeScript)
│   ├── builders/               # 平台特定构建器
│   ├── helpers/                # 工具函数
│   └── options/                # CLI 选项处理
├── docs/                       # 项目文档
│   ├── cli-usage.md            # CLI 使用指南
│   ├── advanced-usage.md       # 高级用法
│   ├── faq.md                  # 常见问题
│   └── github-actions-usage.md # 在线构建指南
├── src-tauri/                  # Tauri 应用核心(Rust)
│   ├── src/
│   │   ├── app/                # 核心模块(窗口、托盘、快捷键)
│   │   ├── inject/             # 网页注入逻辑(CSS/JS)
│   │   │   ├── style.js        # 自定义样式注入
│   │   │   └── event.js        # 事件/快捷键注入
│   │   └── lib.rs              # 应用入口
│   ├── icons/                  # macOS 图标 (.icns)
│   ├── png/                    # Windows/Linux 图标 (.ico, .png)
│   ├── pake.json               # 应用配置
│   └── tauri.*.conf.json       # 平台特定配置
├── scripts/                    # 构建和工具脚本
├── tests/                      # 测试套件
├── dist/                       # 构建输出
├── default_app_list.json       # 预设常用应用列表
├── package.json                # 版本 3.12.0
├── rollup.config.js            # Rollup 打包配置
├── rust-toolchain.toml         # Rust 工具链版本锁定
└── Dockerfile                  # Docker 构建支持

4.2 核心模块介绍

4.2.1 bin/ — CLI 工具(TypeScript)

TypeScript 编写的命令行入口,负责:

  • 解析用户参数(commander)
  • 获取网站图标(sharp + icon-gen)
  • 配置 Tauri 项目(动态生成 pake.json
  • 调用 Rust 编译器(cargo build)
  • 打包输出(生成 DMG/MSI/DEB 等)

4.2.2 src-tauri/ — Tauri 应用核心(Rust)

Rust 编写的桌面应用核心,管理:

  • 窗口管理:创建、缩放、全屏、沉浸式标题栏
  • 系统托盘:最小化到托盘、托盘菜单
  • 快捷键:全局快捷键注册与转发
  • WebView:加载网页、处理导航事件

4.2.3 src-tauri/src/inject/ — 注入系统

向网页注入自定义 CSS 和 JS:

  • style.js:样式定制、广告元素隐藏、窗口美化
  • event.js:事件处理、快捷键透传、页面交互增强

4.2.4 bin/builders/ — 平台构建器

平台特定的构建逻辑:

  • macOS:生成 .dmg / .app
  • Windows:生成 .msi / .exe
  • Linux:生成 .deb / .rpm / .AppImage

4.2.5 default_app_list.json — 预设应用列表

定义 15 个常用应用的打包配置,包含名称、URL、图标等信息,Release 页面可直接下载。

4.3 核心代码解析

4.3.1 打包流程

用户执行 pake <url> --name <name>
    │
    ├── 1. CLI 解析参数(commander)
    ├── 2. 获取网站图标(sharp + icon-gen)
    ├── 3. 动态生成 pake.json 配置
    ├── 4. 生成 Tauri 平台配置(tauri.*.conf.json)
    ├── 5. 调用 cargo build 编译 Rust 应用
    ├── 6. 编译产物注入配置和图标
    └── 7. 打包为平台安装包(dmg/msi/deb)

4.3.2 架构设计

┌─────────────────────────────────────┐
│              CLI 层                  │
│  TypeScript (commander)              │
│  参数解析 · 图标获取 · 配置生成      │
├─────────────────────────────────────┤
│           Tauri 应用层               │
│  Rust (Tauri 2.x)                    │
│  窗口管理 · 托盘 · 快捷键 · WebView  │
├─────────────────────────────────────┤
│          注入层                      │
│  CSS/JS 注入                         │
│  样式定制 · 广告去除 · 事件增强      │
├─────────────────────────────────────┤
│          系统层                      │
│  macOS: WKWebView                    │
│  Windows: WebView2                   │
│  Linux: WebKitGTK                    │
└─────────────────────────────────────┘

4.3.3 Tauri 应用入口(lib.rs)

// 简化的核心逻辑
fn main() {
    tauri::Builder::default()
        // 窗口配置
        .setup(|app| {
            let window = app.get_window("main").unwrap();
            // 设置窗口大小、位置、标题栏等
            Ok(())
        })
        // 系统托盘
        .system_tray(SystemTray::new())
        // 快捷键注册
        .on_menu_event(|event| {
            // 处理快捷键事件
        })
        // 注入 CSS/JS
        .on_page_load(|webview, _| {
            // 注入自定义样式和脚本
        })
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

4.3.4 核心代码文件清单

文件 功能
bin/ CLI 入口,TypeScript 编写
bin/builders/ 平台特定构建器
bin/helpers/ 工具函数
bin/options/ CLI 选项处理
src-tauri/src/lib.rs Tauri 应用入口
src-tauri/src/app/ 窗口、托盘、快捷键管理
src-tauri/src/inject/style.js 自定义样式注入
src-tauri/src/inject/event.js 事件/快捷键注入
src-tauri/pake.json 应用配置
src-tauri/tauri.*.conf.json 平台特定配置
default_app_list.json 预设应用列表
package.json 项目配置(v3.12.0)
rollup.config.js Rollup 打包配置

五、项目的应用、优点和不足

5.1 应用场景

场景 描述 示例
AI 工具桌面化 将 AI 对话工具打包为独立桌面客户端 ChatGPT、DeepSeek、Grok、Gemini
社交媒体桌面版 将 Web 版社交平台打包为桌面应用 微信、Twitter、小红书
视频/音乐播放器 将视频音乐平台打包为独立播放器 YouTube、YouTube Music
生产工具 将 Web 工具打包为桌面应用 Excalidraw 白板、Flomo 笔记、Qwerty 写作
内部工具 将公司内部 Web 系统打包成桌面应用分发 内部管理系统、数据看板
本地 Web 应用 打包本地 HTML/CSS/JS 为独立桌面应用 前端项目打包展示
Flutter Web 应用 通过 --wasm 支持 Flutter Web 桌面化 Flutter Web 项目打包

5.2 与 Electron 对比

对比维度 Pake (Tauri) Electron
包体积 ~5MB ~100-180MB
体积差异 小约 20 倍 大 20 倍
运行时 系统原生 WebView(无需内置浏览器) 内置 Chromium(~130MB)
后端语言 Rust Node.js
内存占用 低(共享系统 WebView) 高(独立 Chromium 实例)
启动速度 较慢
开发语言 Rust + TypeScript JavaScript/TypeScript
跨平台 macOS、Windows、Linux macOS、Windows、Linux
WebView 一致性 依赖系统 WebView(不同 OS 有差异) 内置 Chromium(行为一致)
使用门槛 一条命令打包,无需前端开发 需要前端开发经验
扩展性 通过 CSS/JS 注入定制 完整的 Node.js API

5.3 项目优点

优点 说明
极致轻量 5MB 级别,下载安装快,磁盘占用少
性能优秀 Rust 后端 + 原生 WebView,内存和 CPU 占用远低于 Electron
使用门槛极低 一条命令即可,小白也能用;在线构建无需任何环境
功能丰富 快捷键、托盘、无痕模式、多窗口、CSS/JS 注入等
社区活跃 54k+ Star,2,145 次提交,47 个版本,持续迭代
跨平台覆盖好 三大桌面平台全支持,且支持 x64/ARM64 多架构
开源许可友好 GPL-3.0 但打包产物完全归用户所有(Pake Output Exception)
预设应用丰富 15 个常用应用可直接下载使用,涵盖 AI、社交、视频、工具等
在线构建支持 GitHub Actions 在线构建,无需本地环境
多架构支持 macOS Intel/Apple Silicon/Universal,Windows x64/ARM64,Linux x86_64/ARM64

5.4 项目不足与待改进

不足 说明
WebView 兼容性差异 依赖系统原生 WebView,不同 OS 的渲染效果可能不一致(macOS WKWebView vs Windows WebView2 vs Linux WebKitGTK)
功能受限 本质是"网页套壳",无法像 Electron 那样使用完整的 Node.js API 进行深度系统集成
Rust 环境依赖 本地开发需安装 Rust 工具链,对前端开发者有一定学习成本
首次打包较慢 需要下载 Rust 依赖和编译,后续打包才快(在线构建可规避)
Linux 依赖复杂 需要安装大量系统库(libwebkit2gtk、libgtk 等)
不支持移动端 仅桌面平台,不支持 iOS/Android
部分网页兼容性 某些强依赖浏览器特性的网页(如 Google 登录检测嵌入式 WebView)可能无法正常工作
无离线打包缓存 每次打包都需要重新编译 Rust 代码(可通过 GitHub Actions 缓存优化)
调试能力有限 仅 Debug 模式支持开发者工具,生产环境调试困难
GPL-3.0 协议 对商业二次开发有一定限制(但打包产物不受影响)

5.5 社区与生态

  • GitHub Star:54k+,Rust 中文社区最有影响力的项目之一
  • 版本迭代:47 个 Releases,从 V1.x 到 V3.12.0 持续三年以上迭代
  • 文档完善:中英文 README + CLI 使用指南 + 高级用法 + FAQ + 在线构建指南
  • 预设应用:15 个常用应用可直接下载使用,社区也有大量第三方打包分享
  • Docker 支持:提供 Dockerfile,支持容器化构建
  • GitHub Actions:官方提供在线构建模板,无需本地环境

六、总结

Pake 是 tw93 开发的一款 Rust + Tauri 驱动的网页打包工具,其核心价值在于:

  1. 极致轻量:打包产物仅约 5MB,比 Electron 小近 20 倍,内存占用更低、启动更快
  2. 使用极简:一条命令即可将任意网页打包为 macOS/Windows/Linux 桌面应用,小白也能用
  3. 功能丰富:支持快捷键、系统托盘、沉浸式窗口、CSS/JS 注入、去广告、无痕模式等
  4. 社区活跃:54k+ Star,47 个版本迭代,15 个预设常用应用可直接下载

项目采用 CLI 层(TypeScript)+ Tauri 应用层(Rust)+ 注入层(CSS/JS)+ 系统层(原生 WebView)的四层架构,通过系统原生 WebView 替代 Chromium 实现了体积和性能的革命性突破。对于希望将网页快速桌面化的开发者,Pake 是目前最便捷的选择。

主要短板在于 WebView 兼容性差异(不同 OS 渲染效果可能不一致)、功能受限(无法深度系统集成)、以及不支持移动端。


参考来源

  1. Pake GitHub 仓库
  2. Pake 文档 - CLI 使用指南
  3. Pake 文档 - 高级用法
  4. Pake 文档 - GitHub Actions 在线构建