Vite
本指南將引導您使用前端建置工具 Vite 建立您的第一個 Tauri 應用程式。
在繼續之前,請確保您已完成先決條件,以建立可運作的開發環境。
Tauri 是一個使用任何前端框架和 Rust 核心來建置桌面應用程式的框架。每個應用程式包含兩個部分
- 建立視窗並向這些視窗公開原生功能的 Rust 二進位檔
- 您選擇的前端,在視窗內產生使用者介面
以下,我們將首先建立前端架構、設定 Rust 專案,最後向您展示如何在兩者之間進行通訊。
create-tauri-app
建立新專案最簡單的方法是使用create-tauri-app
工具程式。它提供純 HTML/CSS/JavaScript 和許多前端框架(如 React、Svelte 和 Yew)的意見化範本。
- Bash
- PowerShell
- Cargo
- npm
- Yarn
- pnpm
- Bun
sh <(curl https://create.tauri.app/sh)
irm https://create.tauri.app/ps | iex
cargo install create-tauri-app --locked
cargo create-tauri-app
npm create tauri-app@latest
yarn create tauri-app
pnpm create tauri-app
bunx create-tauri-app
請注意,如果您使用 create-tauri-app
,則不需要遵循本指南的其餘部分,但我們仍建議您閱讀它以了解設定。
以下是我們將建立的預覽
建立前端
Vite 是一個前端打包器和建置工具,表示它提供了各種生活品質功能,例如開發期間的熱模組重新載入 (HMR),但它在建置生產環境時,也會將您的原始碼轉換為最佳化的 HTML、CSS 和 JavaScript。我們推薦 Vite,因為它的速度、易於設定和大量的外掛生態系統。
Vite 附帶一個類似於 create-tauri-app
的架構實用程式,可以從許多預定義的範本快速設定一個新專案。您可以從許多前端框架中進行選擇,例如 React、Svelte 或 Vue。對於本指南,我們將選擇 vanilla-ts
範本,以建立一個沒有任何前端框架的簡單專案。
- npm
- Yarn
- pnpm
- Bun
npm create vite@latest
yarn create vite
pnpm create vite
bunx create-vite@latest
專案名稱
這將會是您的 JavaScript 專案名稱。對應於此實用程式將建立的資料夾名稱,但對您的應用程式沒有其他影響。您可以在這裡使用任何您想要的。名稱。選擇一個框架
如果您計畫稍後使用前端框架,您可以在這裡選擇它。對於本指南,我們假設您選擇vanilla
。選擇一個變體
Vite 為所有範本提供TypeScript 和純 JavaScript 變體,您可以在這裡選擇變體。我們強烈推薦 TypeScript,因為它可以幫助您更快、更有效率地撰寫更安全、更易於維護的程式碼。對於本指南,我們假設您選擇vanilla-ts
。
在您的終端機中,cd
進入新的 Vite 專案資料夾。
透過 vite
指令啟動前端時,Vite 會在專案根目錄中尋找名為 vite.config.ts
的設定檔。我們想要自訂這個檔案,以取得與 Tauri 最佳的相容性。如果它沒有由上述的腳手架建立(例如,如果你使用的是純 JavaScript),你可能需要在專案的根目錄中建立 vite.config.ts
檔案。
使用以下內容更新檔案
import { defineConfig } from 'vite'
export default defineConfig({
// prevent vite from obscuring rust errors
clearScreen: false,
// Tauri expects a fixed port, fail if that port is not available
server: {
strictPort: true,
},
// to access the Tauri environment variables set by the CLI with information about the current target
envPrefix: ['VITE_', 'TAURI_PLATFORM', 'TAURI_ARCH', 'TAURI_FAMILY', 'TAURI_PLATFORM_VERSION', 'TAURI_PLATFORM_TYPE', 'TAURI_DEBUG'],
build: {
// Tauri uses Chromium on Windows and WebKit on macOS and Linux
target: process.env.TAURI_PLATFORM == 'windows' ? 'chrome105' : 'safari13',
// don't minify for debug builds
minify: !process.env.TAURI_DEBUG ? 'esbuild' : false,
// produce sourcemaps for debug builds
sourcemap: !!process.env.TAURI_DEBUG,
},
})
請注意,如果你沒有使用純 JavaScript,你必須保留此檔案中已有的特定框架外掛程式。
建立 Rust 專案
每個 Tauri 應用程式的核心都是一個 Rust 二進位檔,它透過名為 tauri
的 Rust crate 來管理視窗、網頁檢視和呼叫作業系統。這個專案是由 Cargo 管理,它是 Rust 的官方套件管理員和通用建置工具。
我們的 Tauri CLI 在幕後使用 Cargo,因此你很少需要直接與它互動。Cargo 有許多透過我們的 CLI 無法使用的更多有用功能,例如測試、程式碼檢查和格式化,因此請參閱他們的 官方文件 以取得更多資訊。
如果你尚未安裝 Tauri CLI,你可以使用下列其中一個指令進行安裝。不確定要使用哪一個嗎?查看 常見問題解答條目。
- npm
- Yarn
- pnpm
- Bun
- Cargo
npm install --save-dev @tauri-apps/cli
"scripts": {
"tauri": "tauri"
}
yarn add -D @tauri-apps/cli
pnpm add -D @tauri-apps/cli
bun add -D @tauri-apps/cli
cargo install tauri-cli
若要建立一個預先設定好使用 Tauri 的 Rust 最小專案,請開啟終端機並執行下列指令
- npm
- Yarn
- pnpm
- Bun
- Cargo
npm run tauri init
yarn tauri init
pnpm tauri init
bunx tauri init
cargo tauri init
它會引導你完成一系列問題
- 你的應用程式名稱是什麼?
這將會是你的最終套件名稱,以及作業系統會如何稱呼你的應用程式。你可以使用任何你想要的這裡。 - 視窗標題應該是什麼?
這將會是預設主視窗的標題。你可以使用任何你想要的標題。 - 你的網路資源(HTML/CSS/JS)相對於將建立的
<current dir>/src-tauri/tauri.conf.json
檔案位於何處?
這是 Tauri 在建置 生產環境時會從中載入你的前端資源的路徑。使用../dist
作為這個值。 - 你的開發伺服器的 URL 是什麼?
這可以是 Tauri 在 開發期間會載入的 URL 或檔案路徑。使用http://localhost:5173
作為這個值。 - 你的前端開發指令是什麼?
這是用來啟動你的前端開發伺服器的指令。使用npm run dev
(請務必調整為使用你選擇的套件管理員)。 - 你的前端建置指令是什麼?
這是用來建置你的前端檔案的指令。使用npm run build
(請務必調整為使用你選擇的套件管理員)。
如果你熟悉 Rust,你會注意到 tauri init
的外觀和運作方式很像 cargo init
。如果你偏好完全手動設定,你可以只使用 cargo init
並加入必要的 Tauri 相依性。
tauri init
指令會產生一個名為 src-tauri
的資料夾。對於 Tauri 應用程式來說,將所有核心相關檔案放置到這個資料夾中是一種慣例。讓我們快速瀏覽一下這個資料夾的內容
Cargo.toml
Cargo 的清單檔案。你可以宣告你的應用程式所依賴的 Rust 箱子、你的應用程式的元資料,以及更多。有關完整參考,請參閱 Cargo 的清單格式。tauri.conf.json
此檔案可讓您自訂 Tauri 應用程式的各個面向,從應用程式名稱到允許的 API 清單。請參閱 Tauri 的 API 設定,以取得支援選項的完整清單,以及每個選項的詳細說明。src/main.rs
這是 Rust 程式進入點,也是我們引導進入 Tauri 的地方。您會在其中找到兩個區段src/main.rs#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
fn main() {
tauri::Builder::default()
.run(tauri::generate_context!())
.expect("error while running tauri application");
}從
cfg! 巨集
開始的行只有一個目的:停用命令提示字元視窗,如果在 Windows 上執行已套件的應用程式,此視窗通常會彈出。如果您使用 Windows,請嘗試將其註解掉,看看會發生什麼事。main
函式是進入點,也是程式執行時呼叫的第一個函式。圖示
您很可能希望為應用程式設定一個亮眼的圖示!為了讓您快速上手,我們包含了一組預設圖示。您應該在發布應用程式之前將這些圖示換掉。進一步了解 Tauri 的 圖示功能指南 中的各種圖示格式。
現在我們已經建立好前端架構,並初始化 Rust 專案,建立的 tauri.conf.json
檔案應該如下所示
{
"build": {
// This command will execute when you run `tauri build`.
"beforeBuildCommand": "npm run build",
// This command will execute when you run `tauri dev`
"beforeDevCommand": "npm run dev",
"devPath": "http://localhost:5173",
"distDir": "../dist"
},
這樣就完成了!現在您可以在終端機中執行以下指令,以啟動應用程式的開發版本
- npm
- Yarn
- pnpm
- bun
- Cargo
npm run tauri dev
yarn tauri dev
pnpm tauri dev
bunx tauri dev
cargo tauri dev
呼叫指令
Tauri 讓您能以原生功能強化您的前端。我們稱這些為 指令,基本上是您可以從前端 JavaScript 呼叫的 Rust 函式。這讓您能夠以效能更高的 Rust 程式碼處理繁重的處理或呼叫作業系統。
讓我們舉一個簡單的範例
#[tauri::command]
fn greet(name: &str) -> String {
format!("Hello, {}!", name)
}
命令就像任何一般的 Rust 函式,但額外加上 #[tauri::command]
屬性巨集,讓你的函式可以與 JavaScript 環境溝通。
最後,我們也需要告訴 Tauri 我們新建立的命令,以便它可以適當地路由呼叫。這是透過結合 .invoke_handler()
函式和你可以看到下方的 generate_handler![]
巨集來完成的
fn main() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![greet])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
現在你已經準備好從前端呼叫你的命令了!
要呼叫我們新建立的命令,我們將使用 @tauri-apps/api
JavaScript 函式庫。它透過方便的 JavaScript 抽象提供對核心功能的存取,例如視窗、檔案系統等等。你可以使用你最喜歡的 JavaScript 套件管理員來安裝它
- npm
- Yarn
- pnpm
- Bun
npm install @tauri-apps/api
yarn add @tauri-apps/api
pnpm add @tauri-apps/api
bun add @tauri-apps/api
安裝函式庫後,你可以修改你的 main.ts
檔案來呼叫命令
import { invoke } from '@tauri-apps/api'
// now we can call our Command!
// Right-click the application background and open the developer tools.
// You will see "Hello, World!" printed in the console!
invoke('greet', { name: 'World' })
// `invoke` returns a Promise
.then((response) => console.log(response))
如果你想進一步了解 Rust 和 JavaScript 之間的溝通,請閱讀 Tauri 跨程序溝通指南。