Pake 使用教學:把任意網站打包成桌面應用

整理 tw93/Pake 的安裝、命令列打包、自訂圖示和視窗尺寸、本機開發與建置命令,適合把常用網站封裝成輕量桌面應用。

Pake 使用 Tauri 把遠端網頁、本地 HTML 檔案或靜態站點目錄封裝成 macOS、Windows 和 Linux 桌面應用。真正的使用難點不是記住一條 pake URL,而是確認 Node、Rust 和平臺構建依賴齊全,並驗證登入、跳轉、下載、攝像頭等網站能力在系統 WebView 中是否仍然可用。

專案地址:

https://github.com/tw93/Pake

快速結論

  • 推薦使用 Node.js 22,最低要求為 18;CLI 構建還需要 Rust 1.85+。
  • 第一次構建會下載和編譯依賴,明顯慢於後續構建,不能把等待誤判成卡死。
  • 自動化或 Agent 呼叫應加入 --json,不要靠匹配自然語言日誌判斷成功。
  • Pake 不能繞過網站對嵌入式 WebView、第三方 Cookie、SSO 或瀏覽器擴充套件的限制。

檢查環境並安裝 Pake CLI

先檢查版本:

1
2
3
4
node --version
npm --version
rustc --version
cargo --version

Node 低於 18 或 Rust 低於 1.85 時,先升級環境。推薦安裝命令:

README 給出的命令:

1
pnpm install -g pake-cli

也可以直接用 npm:

1
npm install -g pake-cli

安裝後必須驗證當前終端找到的是預期版本:

1
2
pake --version
pake --help

全域性安裝遇到許可權問題時,可先用 npx pake-cli [url] [options],不要直接使用管理員許可權覆蓋系統 Node 目錄。

第一次打包使用公開簡單頁面

把 GitHub 打包成桌面應用:

1
pake https://github.com --name "GitHub"

Pake 預設把產物寫到當前目錄。第一次執行可能安裝 Rust 或平臺元件;命令結束後檢查退出碼和實際安裝包,而不是隻看日誌裡出現 success

自動化環境建議使用結構化輸出:

1
pake https://github.com --name "GitHub" --json

標準輸出應是一份可解析的 JSON。非零退出、JSON 解析失敗或 JSON 中沒有產物路徑,都應視為構建失敗。

自定義圖示、視窗與目標平臺

README 裡給了更完整的示例:

1
pake https://weekly.tw93.fun --name Weekly --icon https://cdn.tw93.fun/pake/weekly.icns --width 1200 --height 800 --hide-title-bar

需要注意平臺差異:

  1. --hide-title-bar 只適用於 macOS。
  2. Windows/Linux 隱藏系統裝飾應使用 --hide-window-decorations
  3. --targets 用於選擇 DMG、AppImage、DEB、RPM 或目標架構,具體可用值依賴當前系統。
  4. 圖示可以是本地或遠端檔案,Pake 會轉換為平臺格式;下載失敗時應改用本地檔案排除網路問題。

例如在 macOS 只生成便於測試的 .app

1
PAKE_CREATE_APP=1 pake https://example.com --name "Example"

Linux 打包 AppImage:

1
pake https://example.com --name "Example" --targets appimage

不要在一臺系統上假設可以無配置地生成所有平臺安裝包。跨架構構建還需要對應 Rust target 和系統工具鏈。

打包本地靜態站點

Pake 可以直接接收包含 index.html 的構建目錄:

1
2
npm run build
pake ./dist --name "MyTool" --json

目錄輸入會打包完整檔案樹。單個 HTML 檔案若需要一併複製旁邊資源,應按官方說明使用 --use-local-file

1
pake ./my-app/index.html --name "MyApp" --use-local-file

本地 SPA 的 Hash 路由可直接工作;History 模式路由並不等同於普通 Web 伺服器,深層路徑重新整理前必須實測。

用配置檔案固定可重複構建

引數較多時,使用 JSON 配置比不斷複製長命令更容易審計:

1
pake --config app.json --json

app.json 納入版本控制,但不要寫入網站登入 Cookie、Token 或內部臨時地址。構建記錄至少保留 Pake 版本、Node 版本、Rust 版本、目標平臺和產物校驗值。

驗證桌面應用而不是隻驗證安裝包

安裝或開啟構建產物後,按網站真實用途逐項檢查:

  1. 首屏能載入,證書和代理沒有報錯。
  2. 登入完成後重啟應用,確認會話是否按預期保留。
  3. 外部連結是在應用內還是系統瀏覽器開啟,行為符合安全邊界。
  4. 檔案上傳、下載、剪貼簿和拖放能否工作。
  5. 快捷鍵、視窗縮放和系統托盤沒有與網頁自身衝突。

如果是視訊會議站點,macOS 還要顯式宣告許可權:

1
pake https://meet.example.com --name "Meet" --camera --microphone

這些引數不能保證網站一定允許 WebView 登入或呼叫裝置,只是為應用新增相應許可權宣告。

登入、SSO 和跳轉失敗怎麼查

先用除錯模式重建:

1
pake https://app.example.com --name "ExampleDebug" --debug

開啟開發者工具檢視 Console 和 Network。常見邊界包括:

  • 身份提供商拒絕嵌入式 WebView。
  • 第三方 Cookie 或跨域儲存被限制。
  • OAuth 回撥跳到另一個域名,被預設交給系統瀏覽器。
  • 網站依賴瀏覽器擴充套件或多標籤頁。

需要保留可信 SSO 域名時,可以評估 --safe-domain

1
pake https://app.example.com --name "Example" --safe-domain app.example.com,login.example.com

不要使用過寬的域名規則把所有連結強制留在應用內。SSO 服務明確拒絕 WebView 時,繼續擴大導航範圍也無法修復。

構建失敗的判斷順序

階段 典型現象 處理方式
CLI 未找到 pake: command not found 檢查 npm/pnpm 全域性 bin 是否進入 PATH,或用 npx pake-cli
Rust 初始化失敗 找不到 rustc、下載超時 單獨安裝 Rust,重新開啟終端後驗證版本
平臺依賴缺失 Tauri bundler、WebKitGTK 或打包器報錯 安裝當前系統所需依賴,不要反覆重灌 pake-cli
圖示處理失敗 下載失敗、格式轉換失敗 改用本地 PNG/ICO/ICNS,再單獨驗證網路
網站白屏 構建成功但執行時無內容 --debug 檢查 CSP、證書、JS 和 WebView 相容性
登入迴圈 登入成功後又回到入口 檢查 Cookie、回撥域名和身份提供商 WebView 政策

如何恢復到最小可用構建

排錯時先保留失敗命令和版本輸出,然後回到最簡單的公開 URL:

1
2
3
4
pake --version
node --version
rustc --version
pake https://example.com --name "PakeSmokeTest" --json

如果最小樣本成功,說明工具鏈基本正常,問題更可能在目標網站、圖示或額外引數。隨後每次只加一個選項。若最小樣本也失敗,再處理 Node、Rust 或平臺依賴。

升級 CLI 後出現迴歸時,不要覆蓋舊產物。記錄當前版本並在隔離目錄重建同一個 smoke test;只有新舊版本差異可重複出現時,才判斷為 CLI 迴歸。

本地開發

如果你想改 Pake 本身:

1
pnpm i

本地開發:

1
pnpm run dev

構建應用:

1
pnpm run build

開發 Pake 本身與使用 CLI 不是同一條路徑。官方當前推薦 Node.js 22,並要求 Rust 1.85+。普通使用者只為封裝網頁時,不需要克隆倉庫執行這組三條命令。

釋出前驗收

釋出給其他人之前,應在乾淨賬號或測試機器完成以下檢查:

  1. --json 返回成功且產物路徑真實存在。
  2. 安裝、啟動、退出和解除安裝均正常。
  3. 登入、回撥、上傳下載與外鏈行為符合預期。
  4. 沒有把內部 Token、Cookie 或除錯入口打進應用。
  5. 記錄 Pake、Node、Rust 版本以及目標架構。
  6. 保留上一份可工作的安裝包,以便新版網站或 CLI 發生迴歸時恢復。

Pake 很適合文件站、監控面板和固定使用的 Web 工具,但不等於完整瀏覽器。先用 --debug 和最小 smoke test 證明目標網站適合 WebView,再做圖示、托盤、視窗和許可權定製,才能避免“安裝包生成成功、應用卻不能用”的假完成。