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
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
请注意,如果您使用 create-tauri-app
就不需要遵循本指南的其余部分,但我们仍建议您阅读本指南以了解设置。
这是我们将要构建的内容的预览:
创建前端
Vite 是一个前端构建包,它在开发过程中提供了各种“生活质量”功能,例如 热模块重载 (HMR)。 在构建生产环境时,它也会将你的源代码转换成最优化的 HTML、CSS 和 JavaScript。 我们推荐使用快速、易配置、拥有 丰富插件生态的Vite。
Vite 附带一个类似于 create-tauri-app
的脚手架工具,可以从许多预定义模板中快速建立一个新项目。 您可以从许多前端框架中选择,如 React、Svelte 或 Vue。 在本指南中,我们将选择 vanilla-ts
模板来创建一个 没有 任何前端框架的简单项目。
- npm
- Yarn
- pnpm
npm create vite@latest
yarn create vite
pnpm create vite
-
项目名称
这将是您的 JavaScript 项目的名称。 对应此工具将创建的文件夹的名称,但在其他方面对你的应用没有影响。 您可以在此处填写任何您想要的名称。 -
选择一个框架
如果您计划之后使用一个前端框架,您可以在这儿选择它。 对于本指南,我们假设您选择原生
。 -
选择一个语言
Vite 为所有模版提供了 TypeScript 和原生JavaScript两种语言,你可以在这里进行选择。 我们强烈推荐TypeScript ,因为它有助于您编写更安全、更快和更有效的代码。 对于本指南,我们假设您选择原生typescript
。
当通过 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,
// 为调试构建生成源代码映射 (sourcemap)
sourcemap: !!process.env.TAURI_DEBUG,
},
})
请注意,如果您没有使用原生 JavaScript,您必须保留已经存在于这个文件中的特定框架插件。
创建 Rust 项目
每款 Tauri 应用的核心都是由一个管理窗口的 Rust 二进制文件、WebView 和进行系统调用的 tauri
Rust 包构成。 此项目使用官方的软件包管理器及 Rust 通用构建工具 Cargo 来管理。
我们的 Tauri CLI 工具会在底层自动调用 Cargo,所以您大部分情况下无需和其交互。 Cargo 有诸多我们的 CLI 工具所未提供的有用功能,包括测试、分析及格式化工具。请参阅其官方文档来了解更多。
如果你还没有安装Tauri CLI,你可以使用下面的一个命令进行安装。 不确定该用哪个? 请参阅常见问题。
- npm
- Yarn
- pnpm
- Cargo
npm install --save-dev @tauri-apps/cli
yarn add -D @tauri-apps/cli
pnpm add -D @tauri-apps/cli
cargo install tauri-cli
要搭建一个使用 Tauri 的简单 Rust 项目,请打开终端并运行如下命令:
- npm
- Yarn
- pnpm
- Cargo
npm run tauri init
yarn tauri init
pnpm tauri init
cargo tauri init
它会向您询问几个问题:
- 您应用的名字是什么?
这将会是您打包后和操作系统会调用的应用名称。 您可以在此处填写任何您想要的名称。 - 窗口标题叫什么?
这将会是您主窗口的默认标题。 您可以在此处填写任何您想要的名称。 - 前端页面资源 (HTML/CSS/JS) 相对于
<current dir>/src-tauri/tauri.conf.json
文件将被创建的位置?
这是生产环境时tauri加载web前端资源的目录.此值使用../dist
。 - 开发环境时的加载路径?
这可以是一个 URL 或文件路径,Tauri 将在开发过程中加载该 URL 或文件路径。此值使用http://localhost:5173
。 - 你将使用什么命令来开发前端页面?
这是启动前端开发服务器的命令。使用npm run dev
(请确保将其调整为使用您选择的软件包管理器). - 你将使用什么命令来构建前端页面?
这是构建前端文件的命令。
若您已熟悉 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": {
// 当你运行 `tauri build` 时,将会执行这个命令。
"beforeBuildCommand": "npm run build",
// 当你运行 `tauri dev`时,将会执行这个命令。
"beforeDevCommand": "npm run dev",
"devPath": "http://localhost:5173",
"distDir": "../dist"
},
就是这样! 现在您可以在您的终端中运行接下来的命令来开始您的应用程序的开发构建:
- npm
- Yarn
- pnpm
- Cargo
npm run tauri dev
yarn tauri dev
pnpm 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
npm install @tauri-apps/api
yarn add @tauri-apps/api
pnpm add @tauri-apps/api
JavaScript 库安装之后,您就可以在 main.ts
中调用指令了:
import { invoke } from '@tauri-apps/api'
// 调用命令
// 在应用窗口中右键,打开开发者工具
// 你会看到控制台上输出了 "Hello, World!"!
invoke('greet', { name: 'World' })
// `invoke` 返回的是一个 Promise
.then((response) => console.log(response))
若您想要了解更多有关 Rust 和 JavaScript 之间通信的信息,请参阅 Tauri 进程间通信指南。