目录

Pake:一条命令将任何网页变成桌面应用,比Electron轻20倍

Pake:一条命令将任何网页变成桌面应用

项目概述

Pake是由开发者twa创建的开源项目,核心功能是将任何网页通过一条命令打包成桌面应用。与传统Electron方案相比,Pake打包出的应用体积小约20倍,性能更高,内存占用更低。

指标数值
GitHub Stars47.6k
Forks9.5k
最新版本V3.11.0 (2026-03-27)
编程语言Rust 92.4%, Dockerfile 6.9%, TypeScript 0.7%
许可证MIT
代码提交2,007次
** Contributors**55+

官方定位:Turn any webpage into a desktop app with one command, supports macOS, Windows, and Linux


核心特性

🎐 轻量级

体积对比:Pake打包的应用通常只有约5MB,而同等功能的Electron应用往往需要50-100MB。这意味着:

  • 下载速度更快
  • 安装更便捷
  • 更新包更小,节省带宽
  • 磁盘占用更低

🚀 高性能

技术选型:基于Rust + Tauri框架构建,相比传统JavaScript框架具有以下优势:

// Tauri的核心优势
// 1. 直接调用系统API,无需Node.js运行时
// 2. 内存占用极低(通常50-100MB vs Electron的200-500MB)
// 3. 启动速度更快
// 4. 二进制直接分发,无需安装运行时

⚡ 易用性

三种使用方式,满足不同用户需求:

┌─────────────────────────────────────────────────────────────┐
│                    Pake 使用方式分层                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  【初学者】下载现成应用包 / GitHub Actions在线构建           │
│      ↓ 无需配置环境,直接使用                              │
│                                                             │
│  【开发者】CLI命令行一键打包                                │
│      ↓ pnpm install -g pake-cli                           │
│                                                             │
│  【高级用户】本地克隆定制开发                               │
│      ↓ git clone + pnpm install + pnpm run dev             │
│                                                             │
└─────────────────────────────────────────────────────────────┘

📦 功能丰富

功能说明
快捷键支持支持全局快捷键,提高操作效率
沉浸式窗口原生窗口体验,无浏览器边框
拖放功能支持文件拖放到应用窗口
样式定制可自定义窗口大小、图标、背景色等
广告去除支持注入CSS/JS去除网页广告
多窗口管理支持新建窗口、窗口管理等

技术架构深度解析

技术栈

Pake 技术架构
├── Rust (Tauri Core)     核心框架,系统API调用
├── WebView2/RWK         系统WebView渲染网页
├── Node.js (pnpm)        构建工具链
├── TypeScript            CLI工具开发
└── Cargo/pnpm            包管理

关键组件

  1. src-tauri/ - Rust后端核心

    • main.rs - 应用入口
    • lib.rs - 库定义
    • commands/ - Tauri命令
    • window/ - 窗口管理
  2. bin/ - CLI打包工具

    • cli.ts - 命令行接口
    • build.ts - 构建逻辑
  3. dist/ - 构建产物

    • 各平台的安装包输出目录

与Electron对比

对比维度ElectronPake (Tauri)
包大小50-200MB5-20MB
内存占用200-500MB50-150MB
启动速度3-10秒0.5-2秒
运行时依赖Node.js无(原生二进制)
系统API受限完整系统权限
安全性需要手动配置默认沙箱

架构差异图

Electron架构:
┌─────────────────────────────────────────┐
│           Chromium Browser               │
│  ┌─────────────────────────────────┐   │
│  │     Node.js Runtime (45MB+)      │   │
│  │  ┌───────────────────────────┐  │   │
│  │  │    Your App (Renderer)    │  │   │
│  │  └───────────────────────────┘  │   │
│  └─────────────────────────────────┘   │
└─────────────────────────────────────────┘

Pake架构:
┌─────────────────────────────────────────┐
│           System WebView (系统自带)       │
│  ┌─────────────────────────────────┐   │
│  │      Your App (只有你+UI)         │   │
│  └─────────────────────────────────┘   │
│           Rust Binary (5MB)             │
└─────────────────────────────────────────┘

快速上手

方式一:下载现成应用(推荐新手)

Pake官方提供了大量预构建的流行应用,直接下载即可使用:

应用macOSWindowsLinux说明
WeRead下载下载下载微信读书
Twitter下载下载下载Twitter/X
Grok下载下载下载xAI Grok
DeepSeek下载下载下载DeepSeek官网
ChatGPT下载下载下载OpenAI ChatGPT
Gemini下载下载下载Google Gemini
YouTube Music下载下载下载YouTube音乐
Excalidraw下载下载下载白板协作工具
XiaoHongShu下载下载下载小红书网页版

更多应用下载

方式二:CLI命令行打包(推荐开发者)

安装CLI工具

# 使用pnpm全局安装
pnpm install -g pake-cli

基本用法

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

CLI参数说明

参数说明示例
--name应用名称--name MyApp
--icon应用图标URL--icon https://.../icon.png
--width窗口宽度--width 1200
--height窗口高度--height 800
--hide-title-bar隐藏标题栏沉浸式体验
--user-agent自定义User-Agent模拟移动端等

方式三:GitHub Actions在线构建(无需本地环境)

# .github/workflows/pake.yml
name: Build Pake App

on:
  workflow_dispatch:
    inputs:
      url:
        description: 'Website URL'
        required: true
      name:
        description: 'App Name'
        required: true

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Build with Pake
        uses: tw93/Pake@main
        with:
          url: ${{ github.event.inputs.url }}
          name: ${{ github.event.inputs.name }}

方式四:本地开发定制

环境要求

  • Rust >= 1.85
  • Node >= 22

开发步骤

# 1. 克隆项目
git clone https://github.com/tw93/Pake.git
cd Pake

# 2. 安装依赖
pnpm install

# 3. 本地开发调试
pnpm run dev  # 右键打开调试模式

# 4. 构建应用
pnpm run build

进阶用法

自定义样式

在项目根目录创建 pake.config.js

// pake.config.js
module.exports = {
  // 窗口配置
  windows: {
    width: 1200,
    height: 800,
    titleBarStyle: 'hidden', // macOS隐藏标题栏
  },
  
  // 注入CSS去除广告
  injectCSS: `
    .ad-banner { display: none !important; }
    .sidebar-ad { display: none !important; }
  `,
  
  // 注入JS增强功能
  injectJS: `
    // 禁用右键菜单
    document.addEventListener('contextmenu', e => e.preventDefault());
  `,
  
  // 图标
  icon: './assets/icon.png',
}

多窗口管理

// 创建多个窗口
const { WebviewWindow } = window.__TAURI__.window;

// 打开新窗口
const webview = new WebviewWindow('second', {
  url: 'https://example.com',
  title: '新窗口',
  width: 800,
  height: 600,
});

webview.once('tauri://created', () => {
  console.log('窗口创建成功');
});

webview.once('tauri://error', (e) => {
  console.error('窗口创建失败:', e);
});

窗口通信

// 主窗口发送消息
window.__TAURI__.event.emit('message', { 
  type: 'update', 
  data: 'Hello from main' 
});

// 子窗口接收消息
window.__TAURI__.event.listen('message', (event) => {
  console.log('Received:', event.payload);
});

应用场景分析

适用场景

场景说明示例
Web应用桌面化将Web版应用变成原生体验ChatGPT、Notion
内部工具企业内部Web系统快速打包OA系统、CRM
个人工具常用网页一键桌面化Twitter、YouTube
轻量级客户端不需要Electron的重量音乐播放器、阅读器
隐私敏感应用避免Electron的全量权限密码管理器

不适用场景

场景原因
需要Node.js原生模块Tauri不支持Node原生模块
复杂系统托盘功能功能相对Electron有限
需要多个BrowserWindowTauri窗口模型不同
重度依赖Chrome扩展WebView不支持扩展API

项目结构详解

Pake/
├── src-tauri/              # Rust后端核心
│   ├── src/
│   │   ├── main.rs       # 应用入口
│   │   ├── lib.rs        # 库定义
│   │   └── commands/     # Tauri命令
│   │       ├── window.rs # 窗口控制命令
│   │       ├── app.rs    # 应用控制命令
│   │       └── config.rs # 配置命令
│   ├── Cargo.toml        # Rust依赖
│   └── tauri.conf.json   # Tauri配置
│
├── bin/                   # CLI工具
│   ├── cli.ts           # 命令行入口
│   ├── build.ts         # 构建逻辑
│   └── icon.ts          # 图标处理
│
├── dist/                 # 构建产物输出
│   ├── macos/           # macOS应用
│   ├── windows/         # Windows安装包
│   └── linux/           # Linux包
│
├── docs/                 # 文档
│   ├── cli-usage.md     # CLI使用指南
│   ├── github-actions-usage.md
│   └── advanced-usage.md # 高级用法
│
├── package.json
├── pnpm-lock.yaml
└── pake.config.js       # 用户配置文件

常见问题FAQ

Q: 打包后的应用安全吗?

A: Pake基于Tauri构建,默认使用系统WebView(macOS用WKWebView,Windows用WebView2,Linux用WebKitGTK),每个应用都是独立的沙箱环境。但需要注意:

  • 应用可以访问完整的系统文件(需要用户授权)
  • 建议只从可信来源打包应用
  • 不要在打包的应用中输入敏感信息(除非是自己信任的应用)

Q: 如何处理登录状态?

A: Pake支持Cookie持久化:

// 首次登录后,下次打开应用会自动保持登录状态
// 如果需要强制重新登录,可以清除应用数据

Q: 可以打包需要WebGL的应用吗?

A: 可以,Pake使用的WebView都支持WebGL。但如果WebGL性能不佳,可以考虑使用Tauri的webview tag配合原生OpenGL。

Q: 如何调试打包后的应用?

# 开发模式启动
pnpm run dev

# 查看日志
# macOS: ~/Library/logs/tw93-Pake/
# Linux: ~/.local/share/tw93-Pake/logs/
# Windows: %APPDATA%\tw93-Pake\logs\

Q: 为什么打包的应用比预期大?

可能原因:

  1. 包含调试符号(发布版本应该用 pnpm run build --release
  2. 应用图标太大(建议PNG格式,256x256即可)
  3. 多语言资源未剥离

与同类项目对比

项目体积性能易用性生态
Electron重(~100MB)一般⭐⭐⭐⭐⭐成熟
Pake轻(~5MB)优秀⭐⭐⭐⭐活跃
Flutter Web中(~30MB)优秀⭐⭐⭐一般
Tauri轻(~10MB)优秀⭐⭐⭐活跃
Neutralino.js轻(~1MB)优秀⭐⭐⭐一般

Pake的优势

  • 专门针对"网页桌面化"场景优化
  • CLI工具开箱即用
  • 预构建了大量流行应用
  • 文档完善,中文支持好

总结

Pake是一个解决实际问题的开源项目:当你需要把一个网页变成桌面应用时,Electron太重、配置复杂,而Pake只需要一条命令就能完成。

核心价值

  1. 极简主义:一行命令,打包完成
  2. 性能优先:Rust+Tauri,小而美
  3. 开箱即用:提供现成应用包
  4. 开发者友好:CLI工具完善

推荐使用场景

  • ✅ 将常用Web应用变成桌面客户端(ChatGPT、Twitter等)
  • ✅ 快速打包内部Web工具
  • ✅ 创建轻量级专用客户端
  • ✅ 不适合需要复杂原生功能的场景

项目地址https://github.com/tw93/Pake


本文基于Pake V3.11.0版本编写,发布时间:2026-04-07