跨平台編譯
Tauri 仰賴原生函式庫和工具鏈,因此目前無法進行有意義的跨編譯。下一個最佳選項是利用託管在類似 GitHub Actions、Azure Pipelines、GitLab 或其他選項上的 CI/CD 管線進行編譯。管線可以同時為每個平台執行編譯,讓編譯和發布流程變得更輕鬆。
為了簡化設定,我們目前提供 Tauri Action,這是一個 GitHub Action,可在所有受支援平台上執行,編譯您的軟體、產生必要的成品,並將它們上傳到新的 GitHub 發行版。
Tauri GitHub Action
Tauri Action 透過 GitHub Actions 同時將您的應用程式建置為 macOS、Linux 和 Windows 的 Tauri 原生二進位檔,並自動建立 GitHub 發行版。
這個 GitHub Action 也可用作 Tauri 應用程式的測試管線,確保編譯在每個提交的 pull request 上都能正常執行於所有平台,即使您不希望建立新發行版。
若要為工作流程中的 Windows 和 macOS 設定程式碼簽署,請遵循每個平台的特定指南
入門
若要設定 Tauri Action,您必須先設定 GitHub 儲存庫。您可以在尚未設定 Tauri 的儲存庫上使用此動作,因為它會在建置和設定使用您的成品之前自動初始化 Tauri。
前往 GitHub 專案上的動作標籤,選擇「新增工作流程」,然後選擇「自行設定工作流程」。使用 Tauri Action 產出建置工作流程範例 替換檔案。或者,您可以根據 本頁底部的範例 設定工作流程
設定
您可以使用 configPath
、distPath
和 iconPath
選項設定 Tauri。詳細資訊請參閱動作自述檔。
當您的應用程式不在儲存庫的根目錄時,請使用 projectPath
輸入。
您可以修改工作流程名稱、變更觸發條件,並新增更多步驟,例如 npm run lint
或 npm run test
。重點是您必須將以下列於工作流程結尾,因為這會執行建置指令碼並釋出成品
- uses: tauri-apps/tauri-action@v0
如何觸發
上述自述檔範例中的釋出工作流程會由「release」分支上的推播觸發。此動作會自動使用 tauri.config.json
中指定的應用程式版本,為 GitHub 釋出建立標籤和標題。
您也可以在推播版本標籤(例如「app-v0.7.0」)時觸發工作流程。為此,您可以變更釋出工作流程的開頭
name: publish
on:
push:
tags:
- 'app-v*'
workflow_dispatch:
範例工作流程
以下是每次在 git 上建立新版本時都會執行的一個範例工作流程。
此工作流程會在 Windows、Ubuntu 和 macOS 的最新版本上設定環境。請注意在 jobs.release.strategy.matrix
下的平台陣列,其中包含 macos-latest
、ubuntu-20.04
和 windows-latest
。
此工作流程執行的步驟如下
- 使用
actions/checkout@v4
簽出儲存庫 - 使用
actions/setup-node@v4
設定 Node LTS 和全球 npm/yarn/pnpm 套件資料的快取。 - 使用
dtolnay/rust-toolchain@stable
和swatinem/rust-cache@v2
設定 Rust 和target/
資料夾的快取。 - 安裝所有相依性並執行建置指令碼(適用於網路應用程式)。
- 最後,它使用
tauri-apps/tauri-action@v0
來執行tauri build
、產生成品並建立 GitHub 釋出版本。
name: Release
on:
push:
tags:
- 'v*'
workflow_dispatch:
jobs:
release:
permissions:
contents: write
strategy:
fail-fast: false
matrix:
platform: [macos-latest, ubuntu-20.04, windows-latest]
runs-on: ${{ matrix.platform }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install dependencies (ubuntu only)
if: matrix.platform == 'ubuntu-20.04'
# You can remove libayatana-appindicator3-dev if you don't use the system tray feature.
run: |
sudo apt-get update
sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libayatana-appindicator3-dev librsvg2-dev
- name: Rust setup
uses: dtolnay/rust-toolchain@stable
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: './src-tauri -> target'
- name: Sync node version and setup cache
uses: actions/setup-node@v4
with:
node-version: 'lts/*'
cache: 'yarn' # Set this to npm, yarn or pnpm.
- name: Install frontend dependencies
# If you don't have `beforeBuildCommand` configured you may want to build your frontend here too.
run: yarn install # Change this to npm, yarn or pnpm.
- name: Build the app
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tagName: ${{ github.ref_name }} # This only works if your workflow triggers on new tags.
releaseName: 'App Name v__VERSION__' # tauri-action replaces \_\_VERSION\_\_ with the app version.
releaseBody: 'See the assets to download and install this version.'
releaseDraft: true
prerelease: false
GitHub 環境權杖
GitHub 權杖會在每次工作流程執行時由 GitHub 自動發布,無需進一步設定,這表示沒有機密外洩的風險。不過,此權杖預設只有讀取權限,您在執行工作流程時可能會收到「整合無法存取資源」的錯誤訊息。如果發生這種情況,您可能需要新增寫入權限到此權杖。為此,請前往您的 GitHub 專案設定,然後選擇動作,向下捲動到「工作流程權限」並勾選「讀取和寫入權限」。
您可以在下方看到傳遞給工作流程的 GitHub 權杖
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
使用注意事項
請務必查看 GitHub Actions 文件 以更深入了解此工作流程的運作方式。請務必閱讀 使用限制、計費和管理 文件以了解 GitHub Actions。某些專案範本可能已經實作此 GitHub 動作工作流程,例如 tauri-svelte-template。您可以在未設定 Tauri 的存放庫上使用此動作。Tauri 會在建置和設定為使用您的網路成品之前自動初始化。
實驗性質:在 Linux 和 macOS 上建置 Windows 應用程式
Tauri v1.3 新增一種新的 Windows 安裝程式類型,它基於 NSIS 安裝程式架構。與 WiX 相比,NSIS 本身也可以在 Linux 和 macOS 上執行,這使得在非 Windows 主機上建置許多 Tauri 應用程式成為可能。請注意,這目前被認為是高度實驗性質,可能無法在每個系統或每個專案上執行。因此,只有在您無法使用本機 VM 或 GitHub Actions 等 CI 解决方案時,才應將其作為最後的手段。請注意,目前不支援跨平台建置的簽署。
由於 Tauri 官方只支援 MSVC Windows 目標,因此設定會稍微複雜一些。
首先,請確保您的所有 Tauri 相依項至少為版本 1.3,如果您不確定如何執行,請查看 相依項更新指南。
安裝 NSIS
某些 Linux 發行版在他們的儲存庫中提供 NSIS,例如在 Ubuntu 中,你可以執行此命令來安裝 NSIS
sudo apt install nsis
但在許多其他發行版中,你必須自行編譯 NSIS 或手動下載發行套件的二進制套件中未包含的 Stubs 和 Plugins。例如 Fedora 只提供二進制,但不提供 Stubs 和 Plugins
sudo dnf in mingw64-nsis
wget https://github.com/tauri-apps/binary-releases/releases/download/nsis-3/nsis-3.zip
unzip nsis-3.zip
sudo cp nsis-3.08/Stubs/* /usr/share/nsis/Stubs/
sudo cp -r nsis-3.08/Plugins/** /usr/share/nsis/Plugins/
在 macOS 中,你需要 Homebrew 來安裝 NSIS
brew install nsis
安裝 LLVM 和 LLD 連結器
由於預設的 Microsoft 連結器只在 Windows 上執行,因此我們也需要安裝一個新的連結器。為了編譯 Windows 資源檔案(用於設定應用程式圖示等),我們也需要 LLVM 專案的一部分 llvm-rc
二進制檔案。
sudo apt install lld llvm
在 Linux 中,如果你新增了在建置指令碼中編譯 C/C++ 相依項目的相依項目,你也需要安裝 clang
套件。預設的 Tauri 應用程式不應需要這個。
brew install llvm
在 macOS 中,你還必須將 /opt/homebrew/opt/llvm/bin
新增到你的 $PATH
,如安裝輸出中所建議的。
安裝 Windows Rust 目標
假設你正在為 64 位元 Windows 系統建置
rustup target add x86_64-pc-windows-msvc
安裝 cargo-xwin
我們將使用 [cargo-xwin
] 作為 Tauri 的「執行程式」,而不是手動設定 Windows SDK
cargo install cargo-xwin
預設情況下,cargo-xwin
會將 Windows SDK 下載到專案本機資料夾中。如果您有多個專案並想要共用這些檔案,您可以設定 XWIN_CACHE_DIR
環境變數,並指定路徑到您偏好的位置。
建置應用程式
現在,只要將執行器和目標新增到 tauri build
指令中,就應該很簡單了
- npm
- Yarn
- pnpm
- bun
- Cargo
npm run tauri build -- --runner cargo-xwin --target x86_64-pc-windows-msvc
yarn tauri build --runner cargo-xwin --target x86_64-pc-windows-msvc
pnpm tauri build --runner cargo-xwin --target x86_64-pc-windows-msvc
bunx tauri build --runner cargo-xwin --target x86_64-pc-windows-msvc
cargo tauri build --runner cargo-xwin --target x86_64-pc-windows-msvc
建置輸出將會在 target/x86_64-pc-windows-msvc/release/bundle/nsis/
中。