簡介
tauri是一款基于web的桌面應用前端框架
因為使用webviews渲染,而不是像electron自帶一個瀏覽器內核,所以打包之后的空間更小,十幾mb
前端界面使用web,可以采取流行的框架,入react,vue等
前端后臺采用rust,彌補前端無法直接訪問操作系統,常用于訪問本地文件系統
官方中文文檔
運行環境
MSVC
作用 : 在 Windows 平臺上為 Rust 和 Tauri 提供編譯、鏈接支持。
安裝 : 下載cpp構建工具,安裝工作負荷->左面應用與移動應用->使用c++的桌面開發
webview2
作用 : 渲染前端
安裝 : 在win10及以上默認安裝
rust
作用 : 作為前端的后臺,為web前端提供與操作系統交互能力
安裝 : 下載64位,然后直接回車
如果下載太慢,在安裝包目錄打開ps,輸入下面指令,使用中科大的源
$ENV:RUSTUP_DIST_SERVER='https://mirrors.ustc.edu.cn/rust-static'
$ENV:RUSTUP_UPDATE_ROOT='https://mirrors.ustc.edu.cn/rust-static/rustup'
.\rustup-init.exe
cargo
rust的包管理工具,換中科大源,windows目錄%USERPROFILE%\.cargo
,新建文件config.toml
,輸入以下內容
[source.crates-io]
replace-with = 'ustc'[source.ustc]
registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"
nodejs
前端運行環境
安裝 : 官方下載鏈接
第一個工程
vscode里面終端使用的ps,輸入下面命令初始化工程
irm https://create.tauri.app/ps | iex
cd .\tauri-app\
按提示選擇自己需要的配置,生成完成后
其中src就是前端代碼,src-tauri是rust后端代碼
輸入下面,根據package.json安裝依賴
npm install
運行下面執行,可以得到一個應用界面
如果下載過慢,請換cargo源
npm run tauri dev
開發階段可以
npm run dev
打包
npm run tauri build
然后就可以在src-tauri/target/release里面得到打包的程序,大約10mb
壓縮之后大約3mb
前臺
src/目錄,可以選自自己常用的前端框架
前端的修改可以實時渲染
調試
應用運行時,可以按f12進行調試,跟瀏覽器一樣
文件操作
使用系統封裝好的函數接口
先安裝官方插件
npm run tauri add fs
然后前端調用
import { writeFile, BaseDirectory } from '@tauri-apps/plugin-fs';async function greet() {setGreetMsg(await invoke("greet", { name }));let encoder = new TextEncoder();let data = encoder.encode("Hello, world!");await writeFile("hello.txt", data, { baseDir: BaseDirectory.Desktop })}
在src-tauri/capabilities/defaut.json的permissions中為文件操作的插件添加權限
"fs:default",
"fs:scope-desktop",
"fs:write-all"
后臺
src-tauri/目錄,即rust后臺,為前端提供訪問操作系統資源的能力
一般操作官方都有封裝好的插件供前端直接調用,入前面的文件操作
自定義函數
可以看到lib.rs
如下,提供了一個前端可調用的命令greet
封裝一個自定義函數需要兩步
- 使用
#[tauri::command]
暴露接口 - 在
invoke_handler
中注冊函數
#[tauri::command]//宏定義,暴露greet,可通過前端invoke調用
fn greet(name: &str) -> String {format!("Hello, {}! You've been greeted from Rust!", name)
}#[cfg_attr(mobile, tauri::mobile_entry_point)]//配置移動應用入口點,桌面應用可忽略
pub fn run() {//程序入口點tauri::Builder::default().plugin(tauri_plugin_opener::init()).invoke_handler(tauri::generate_handler![greet])//注冊可以被前端調用的函數.run(tauri::generate_context!()).expect("error while running tauri application");
}