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 管理窗口、webview 和对操作系统的调用。此项目由 Cargo 管理,Cargo 是 Rust 的官方包管理器和通用构建工具。
我们的 Tauri CLI 在后台使用 Cargo,因此您很少需要直接与它交互。Cargo 还有许多通过我们的 CLI 未公开的更有用的功能,例如测试、代码检查和格式化,因此请参阅其 官方文档 以了解更多信息。
如果您尚未安装 Tauri CLI,您可以使用以下命令之一进行安装。不确定使用哪个?查看 常见问题解答条目。
- npm
- Yarn
- pnpm
- Bun
- Cargo
npm install --save-dev @tauri-apps/cli@">1.0.0"
"scripts": {
"tauri": "tauri"
}
yarn add -D @tauri-apps/cli@^1.0.0
pnpm add -D @tauri-apps/cli@1
bun add -D @tauri-apps/[email protected]
cargo install tauri-cli --version "^1.0.0"
要搭建一个预先配置为使用 Tauri 的最小 Rust 项目,请打开终端并运行以下命令
- npm
- Yarn
- pnpm
- Bun
- Cargo
npm run tauri init
yarn tauri init
pnpm tauri init
bunx tauri init
cargo tauri init
它将引导您完成一系列问题
- 您的应用程序名称是什么?
这将是您的最终包的名称,也是操作系统将您的应用程序称为什么。您可以在这里使用任何名称。 - 窗口标题应是什么?
这将是默认主窗口的标题。您可以在这里使用任何标题。 - 您的 Web 资源(HTML/CSS/JS)相对于
<current dir>/src-tauri/tauri.conf.json
文件(将被创建)位于何处?
这是 Tauri 在构建**生产**版本时将从中加载前端资源的路径。为此值使用../dist
。 - 您的开发服务器的 URL 是什么?
这可以是 Tauri 在开发过程中将加载的 URL 或文件路径。 开发.为此值使用https://127.0.0.1:5173
。 - 您的前端开发命令是什么?
这是用于启动前端开发服务器的命令。使用npm run dev
(确保将其调整为使用您选择的包管理器)。 - 您的前端构建命令是什么?
这是构建前端文件的命令。使用npm run build
(确保将其调整为使用您选择的包管理器)。
如果您熟悉 Rust,您会注意到 tauri init
看起来和工作方式非常类似于 cargo init
。如果您更喜欢完全手动设置,则可以使用 cargo init
并添加必要的 Tauri 依赖项。
tauri init
命令生成一个名为 src-tauri
的文件夹。对于 Tauri 应用程序来说,将所有核心相关文件放在此文件夹中是一种约定。让我们快速浏览一下此文件夹的内容
Cargo.toml
Cargo 的清单文件。您可以在其中声明您的应用程序依赖的 Rust crate、有关您的应用程序的元数据等等。有关完整参考,请参见 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": "https://127.0.0.1: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@">1.0.0"
yarn add @tauri-apps/api@^1.0.0
pnpm add @tauri-apps/api@1
bun add @tauri-apps/[email protected]
安装该库后,您可以修改您的 `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 的 进程间通信 指南。