跨平台编译
Tauri 严重依赖于本机库和工具链,因此目前无法进行有意义的交叉编译。下一个最佳选择是利用托管在 GitHub Actions、Azure Pipelines、GitLab 或其他选项上的 CI/CD 管道进行编译。该管道可以同时为每个平台运行编译,从而使编译和发布过程变得更加容易。
为了便于设置,我们目前提供 Tauri Action,这是一个在所有受支持平台上运行的 GitHub Action,它会编译您的软件、生成必要的工件并将其上传到新的 GitHub 版本。
Tauri GitHub Action
Tauri Action 利用 GitHub Actions 同时以 Tauri 原生二进制文件格式为 macOS、Linux 和 Windows 构建你的应用程序,并自动创建 GitHub 版本。
此 GitHub Action 还可用作 Tauri 应用程序的测试管道,即使你不想创建新版本,也能保证编译在每次发送的拉取请求中都能在所有平台上正常运行。
要在工作流中为 Windows 和 macOS 设置代码签名,请遵循每个平台的特定指南
入门
要设置 Tauri Action,你必须先设置一个 GitHub 存储库。你可以在没有配置 Tauri 的存储库上使用此操作,因为它会在构建和配置 Tauri 以使用你的制品之前自动初始化 Tauri。
转到 GitHub 项目上的操作选项卡,选择“新建工作流”,然后选择“自己设置工作流”。使用Tauri Action 生产构建工作流示例替换文件。或者,你可以根据本页底部的示例设置工作流
配置
你可以使用 configPath
、distPath
和 iconPath
选项配置 Tauri。有关详细信息,请参阅操作自述文件。
当你的应用程序不在存储库的根目录中时,请使用 projectPath
输入。
你可以修改工作流名称、更改触发器,并添加更多步骤,例如 npm run lint
或 npm run test
。重要的是,你将以下行保留在工作流的末尾,因为这会运行构建脚本并发布制品
- uses: tauri-apps/tauri-action@v0
如何触发
上面链接的 README 示例中的发布工作流由“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/
文件夹的缓存。 - 安装所有依赖项并运行构建脚本(用于 Web 应用程序)。
- 最后,它使用
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 会在构建和配置它以使用你的 Web 工件之前自动初始化。
实验性:在 Linux 和 macOS 上构建 Windows 应用程序
Tauri v1.3 添加了一种基于 NSIS 安装程序框架的新 Windows 安装程序类型。与 WiX 相比,NSIS 本身也可以在 Linux 和 macOS 上运行,这使得在非 Windows 主机上构建许多 Tauri 应用程序成为可能。请注意,这目前被认为是高度实验性的,可能无法在每个系统或每个项目上运行。因此,只有在本地虚拟机或 GitHub Actions 等 CI 解决方案对您不起作用时,才应将其作为最后的手段使用。请注意,目前不支持跨平台构建的签名。
由于 Tauri 官方只支持 MSVC Windows 目标,因此设置会稍微复杂一些。
首先,确保您的所有 Tauri 依赖项至少为 1.3 版本,如果您不确定如何操作,请查看 依赖项更新指南。
安装 NSIS
一些 Linux 发行版在其存储库中提供了 NSIS,例如在 Ubuntu 上,您可以通过运行此命令来安装 NSIS
sudo apt install nsis
但在许多其他发行版上,您必须自己编译 NSIS 或手动下载发行版的二进制包中未包含的 Stubs 和插件。例如,Fedora 只提供二进制文件,但不提供 Stubs 和插件
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-rc` 二进制文件,它是 LLVM 项目的一部分。
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/
。