Tauri开发手记——1.开发环境
一、搭建环境
1、先在提示符下安装工具
cargo install create-tauri-app --locked
如果安装过了,它会提示,无需担心
D:\rust_projects>cargo install create-tauri-app --lockedUpdating `ustc` indexIgnored package `create-tauri-app v4.6.2` is already installed, use --force to override
2、创建项目
cargo create-tauri-app
D:\rust_projects>cargo create-tauri-app
✔ Project name · t4
✔ Identifier · com.gyfin.t4
✔ Choose which language to use for your frontend · TypeScript / JavaScript - (pnpm, yarn, npm, deno, bun)
✔ Choose your package manager · npm
✔ Choose your UI template · Vanilla
✔ Choose your UI flavor · JavaScriptTemplate created! To get started run:cd t4npm installnpm run tauri android initFor Desktop development, run:npm run tauri devFor Android development, run:npm run tauri android dev
3、开始运行
安装依赖包:
npm install
D:\rust_projects\t4>npm installadded 2 packages, and audited 3 packages in 26s1 package is looking for fundingrun `npm fund` for detailsfound 0 vulnerabilities
之后对Cargo.toml中的版本号加以精准的指定。
[dependencies]
# 用最新的 Beta 版本(推荐 2.0.0-beta.20,可按需更新)
tauri = "2.0.0-beta.20"
tauri-plugin-opener = "2.0.0-beta.20"[build-dependencies]
tauri-build = "2.0.0-beta.20"
之后运行
cargo tauri dev
首次运行后,需要下载和编译近400个库。要耐心等待。
D:\rust_projects\t4>cargo tauri devRunning DevCommand (`cargo run --no-default-features --color always --`)Info Watching D:\rust_projects\t4\src-tauri for changes...Compiling proc-macro2 v1.0.103Compiling quote v1.0.42Compiling unicode-ident v1.0.22Compiling cfg-if v1.0.4Compiling serde_core v1.0.228Compiling zerocopy v0.8.27Compiling smallvec v1.15.1Compiling getrandom v0.2.16Compiling rand_core v0.6.4Compiling litemap v0.8.1Compiling syn v2.0.109Compiling writeable v0.6.2Compiling windows-link v0.2.1Compiling itoa v1.0.15Compiling serde v1.0.228Compiling stable_deref_trait v1.2.1Compiling ppv-lite86 v0.2.21Compiling siphasher v1.0.1Compiling memchr v2.7.6Compiling rand_chacha v0.3.1Compiling rand v0.8.5Compiling icu_properties_data v2.1.1Compiling icu_normalizer_data v2.1.1Compiling phf_shared v0.11.3Compiling fnv v1.0.7Compiling phf_generator v0.11.3Compiling siphasher v0.3.11Compiling getrandom v0.1.16Compiling ryu v1.0.20Compiling thiserror v2.0.17Compiling byteorder v1.5.0Compiling utf8_iter v1.0.4Compiling synstructure v0.13.2Compiling rand_core v0.5.1Compiling strsim v0.11.1Compiling winnow v0.7.13Compiling syn v1.0.109Compiling ident_case v1.0.1Compiling typeid v1.0.3Compiling parking_lot_core v0.9.12Compiling log v0.4.28Compiling darling_core v0.21.3Compiling windows-sys v0.61.2Compiling serde_derive v1.0.228Compiling zerofrom-derive v0.1.6Compiling zerofrom v0.1.6Compiling yoke-derive v0.8.1Compiling zerovec-derive v0.11.2Compiling displaydoc v0.2.5Compiling yoke v0.8.1Compiling thiserror-impl v2.0.17Compiling zerotrie v0.2.3Compiling phf_macros v0.11.3Compiling zerovec v0.11.5Compiling toml_parser v1.0.4Compiling tinystr v0.8.2Compiling potential_utf v0.1.4Compiling icu_locale_core v2.1.1Compiling erased-serde v0.4.9Compiling toml_writer v1.0.4Compiling scopeguard v1.2.0Compiling lock_api v0.4.14Compiling icu_collections v2.1.1Compiling darling_macro v0.21.3Compiling icu_provider v2.1.1Compiling rand_chacha v0.2.2Compiling rand_pcg v0.2.1Compiling phf_shared v0.8.0Compiling aho-corasick v1.1.4Compiling unic-char-range v0.9.0Compiling thiserror v1.0.69Compiling unic-common v0.9.0Compiling proc-macro-hack v0.5.20+deprecatedCompiling regex-syntax v0.8.8Compiling unic-ucd-version v0.9.0Compiling unic-char-property v0.9.0Compiling rand v0.7.3Compiling parking_lot v0.12.5Compiling regex-automata v0.4.13Compiling darling v0.21.3Compiling thiserror-impl v1.0.69Compiling phf_shared v0.10.0Compiling windows_x86_64_msvc v0.52.6Compiling serde_json v1.0.145Compiling alloc-no-stdlib v2.0.4Compiling bytes v1.10.1Compiling new_debug_unreachable v1.0.6Compiling getrandom v0.3.4Compiling regex v1.12.2Compiling alloc-stdlib v0.2.2Compiling phf_generator v0.10.0Compiling serde_with_macros v3.15.1Compiling phf_generator v0.8.0Compiling unic-ucd-ident v0.9.0Compiling icu_normalizer v2.1.1Compiling icu_properties v2.1.1Compiling winapi-util v0.1.11Compiling phf_codegen v0.11.3Compiling string_cache_codegen v0.5.4Compiling precomputed-hash v0.1.1Compiling mac v0.1.1Compiling dunce v1.0.5Compiling anyhow v1.0.100Compiling markup5ever v0.14.1Compiling idna_adapter v1.2.1Compiling futf v0.1.5Compiling same-file v1.0.6Compiling phf_macros v0.10.0Compiling phf_codegen v0.8.0Compiling brotli-decompressor v5.0.0Compiling http v1.3.1Compiling cssparser v0.29.6Compiling semver v1.0.27Compiling toml_datetime v0.7.3Compiling serde_spanned v1.0.3Compiling percent-encoding v2.3.2Compiling utf-8 v0.7.6Compiling autocfg v1.5.0Compiling bitflags v1.3.2Compiling dtoa v1.0.10Compiling version_check v0.9.5Compiling dtoa-short v0.3.5Compiling tendril v0.4.3Compiling form_urlencoded v1.2.2Compiling indexmap v1.9.3Compiling toml v0.9.8Compiling uuid v1.18.1Compiling brotli v8.0.2Compiling phf v0.10.1Compiling selectors v0.24.0Compiling windows-targets v0.52.6Compiling walkdir v2.5.0Compiling idna v1.1.0Compiling string_cache v0.8.9Compiling phf v0.11.3Compiling cssparser-macros v0.6.1Compiling ctor v0.2.9Compiling camino v1.2.1Compiling windows-link v0.1.3Compiling libc v0.2.177Compiling matches v0.1.10Compiling nodrop v0.1.14Compiling convert_case v0.4.0Compiling glob v0.3.3Compiling servo_arc v0.2.0Compiling derive_more v0.99.20Compiling url v2.5.7Compiling phf v0.8.0Compiling match_token v0.1.0Compiling serde_derive_internals v0.29.1Compiling fxhash v0.2.1Compiling hashbrown v0.12.3Compiling schemars v0.8.22Compiling find-msvc-tools v0.1.4Compiling equivalent v1.0.2Compiling shlex v1.3.0Compiling hashbrown v0.16.0Compiling cc v1.2.45Compiling indexmap v2.12.0Compiling schemars_derive v0.8.22Compiling html5ever v0.29.1Compiling cfb v0.7.3Compiling jsonptr v0.6.3Compiling cargo-platform v0.1.9Compiling dyn-clone v1.0.20Compiling serde-untagged v0.1.9Compiling cargo_metadata v0.19.2Compiling json-patch v3.0.1Compiling infer v0.19.0Compiling kuchikiki v0.8.8-speedreaderCompiling vswhom-sys v0.1.3Compiling urlpattern v0.3.0Compiling windows-result v0.3.4Compiling windows-strings v0.4.2Compiling serde_with v3.15.1Compiling windows-implement v0.60.2Compiling windows-interface v0.59.3Compiling windows-core v0.61.2Compiling windows-sys v0.59.0Compiling typenum v1.19.0Compiling tauri-utils v2.8.0Compiling vswhom v0.1.0Compiling windows-threading v0.1.0Compiling generic-array v0.14.9Compiling rustc_version v0.4.1Compiling option-ext v0.2.0Compiling dirs-sys v0.5.0Compiling windows-future v0.2.1Compiling windows-collections v0.2.0Compiling windows-numerics v0.2.0Compiling simd-adler32 v0.3.7Compiling winreg v0.55.0Compiling crc32fast v1.5.0Compiling heck v0.5.0Compiling embed-resource v3.0.6Compiling tauri-winres v0.3.3Compiling windows v0.61.3Compiling dirs v6.0.0Compiling cargo_toml v0.22.3Compiling webview2-com-sys v0.38.0Compiling adler2 v2.0.1Compiling num-conv v0.1.0Compiling powerfmt v0.2.0Compiling time-core v0.1.6Compiling crossbeam-utils v0.8.21Compiling raw-window-handle v0.6.2Compiling time-macros v0.2.24Compiling deranged v0.5.5Compiling tauri-build v2.5.1Compiling miniz_oxide v0.8.9Compiling cookie v0.18.1Compiling dpi v0.1.2Compiling windows_x86_64_msvc v0.53.1Compiling flate2 v1.1.5Compiling time v0.3.44Compiling crypto-common v0.1.6Compiling block-buffer v0.10.4Compiling fdeflate v0.3.7Compiling webview2-com-macros v0.8.0Compiling bitflags v2.10.0Compiling windows-version v0.1.7Compiling cfg_aliases v0.2.1Compiling once_cell v1.21.3Compiling unicode-segmentation v1.12.0Compiling softbuffer v0.4.6Compiling png v0.17.16Compiling tauri v2.9.2Compiling digest v0.10.7Compiling crossbeam-channel v0.5.15Compiling tauri-runtime v2.9.1Compiling cpufeatures v0.2.17Compiling wry v0.53.5Compiling sha2 v0.10.9Compiling windows-targets v0.53.5Compiling ico v0.4.0Compiling tauri-plugin v2.5.1Compiling tauri-runtime-wry v2.9.1Compiling base64 v0.22.1Compiling lazy_static v1.5.0Compiling tauri-plugin-opener v2.5.2Compiling tauri-codegen v2.5.0Compiling windows-sys v0.60.2Compiling keyboard-types v0.7.0Compiling serialize-to-javascript-impl v0.1.2Compiling pin-project-lite v0.2.16Compiling tokio v1.48.0Compiling muda v0.17.1Compiling serialize-to-javascript v0.1.2Compiling tauri-macros v2.5.0Compiling window-vibrancy v0.6.0Compiling serde_repr v0.1.20Compiling mime v0.3.17Compiling t4 v0.1.0 (D:\rust_projects\t4\src-tauri)Compiling open v5.3.2Compiling tao v0.34.5Compiling webview2-com v0.38.0Finished `dev` profile [unoptimized + debuginfo] target(s) in 6m 29sRunning `target\debug\t4.exe`
启动成功后,会弹出初始示例程序界面。如未弹出或出现错误,那就调吧!
基本上就是以下方法连用:
#先清理原来安装的
cargo clean
#再删掉Cargo.lock
del Cargo.lock
#再运行
cargo tauri dev
当第二次运行该命令时,就不需要重复上述步骤了。如下:
D:\rust_projects\t4>cargo tauri devRunning DevCommand (`cargo run --no-default-features --color always --`)Info Watching D:\rust_projects\t4\src-tauri for changes...Compiling t4 v0.1.0 (D:\rust_projects\t4\src-tauri)Finished `dev` profile [unoptimized + debuginfo] target(s) in 16.05sRunning `target\debug\t4.exe`
4、可执行文件
如果一切正常,执行以下命令进行编译。
cargo tauri build
初次执行完整的编译需要下载和编译450个库,需要耐心等待。
D:\rust_projects\t4>cargo tauri buildInfo Looking up installed tauri packages to check mismatched versions...Compiling proc-macro2 v1.0.103Compiling unicode-ident v1.0.22Compiling quote v1.0.42Compiling cfg-if v1.0.4Compiling serde_core v1.0.228Compiling zerocopy v0.8.27Compiling getrandom v0.2.16Compiling rand_core v0.6.4Compiling icu_properties_data v2.1.1Compiling icu_normalizer_data v2.1.1Compiling syn v2.0.109Compiling serde v1.0.228Compiling stable_deref_trait v1.2.1Compiling siphasher v1.0.1Compiling ppv-lite86 v0.2.21Compiling phf_shared v0.11.3Compiling rand_chacha v0.3.1Compiling smallvec v1.15.1Compiling rand v0.8.5Compiling thiserror v2.0.17Compiling siphasher v0.3.11Compiling phf_generator v0.11.3Compiling parking_lot_core v0.9.12Compiling fnv v1.0.7Compiling windows-link v0.2.1Compiling getrandom v0.1.16Compiling typeid v1.0.3Compiling strsim v0.11.1Compiling rand_core v0.5.1Compiling windows_x86_64_msvc v0.52.6Compiling writeable v0.6.2Compiling litemap v0.8.1Compiling synstructure v0.13.2Compiling syn v1.0.109Compiling thiserror v1.0.69Compiling erased-serde v0.4.9Compiling ident_case v1.0.1Compiling itoa v1.0.15Compiling memchr v2.7.6Compiling darling_core v0.21.3Compiling getrandom v0.3.4Compiling rand_chacha v0.2.2Compiling rand_pcg v0.2.1Compiling phf_shared v0.8.0Compiling zerofrom-derive v0.1.6Compiling serde_derive v1.0.228Compiling yoke-derive v0.8.1Compiling zerovec-derive v0.11.2Compiling displaydoc v0.2.5Compiling zerofrom v0.1.6Compiling yoke v0.8.1Compiling zerovec v0.11.5Compiling thiserror-impl v2.0.17Compiling tinystr v0.8.2Compiling icu_locale_core v2.1.1Compiling potential_utf v0.1.4Compiling zerotrie v0.2.3Compiling phf_macros v0.11.3Compiling icu_collections v2.1.1Compiling icu_provider v2.1.1Compiling darling_macro v0.21.3Compiling thiserror-impl v1.0.69Compiling proc-macro-hack v0.5.20+deprecatedCompiling anyhow v1.0.100Compiling darling v0.21.3Compiling rand v0.7.3Compiling phf_shared v0.10.0Compiling serde_json v1.0.145Compiling new_debug_unreachable v1.0.6Compiling byteorder v1.5.0Compiling scopeguard v1.2.0Compiling lock_api v0.4.14Compiling phf_generator v0.10.0Compiling icu_properties v2.1.1Compiling phf_generator v0.8.0Compiling serde_with_macros v3.15.1Compiling icu_normalizer v2.1.1Compiling windows-sys v0.61.2Compiling string_cache_codegen v0.5.4Compiling phf_codegen v0.11.3Compiling winnow v0.7.13Compiling ryu v1.0.20Compiling libc v0.2.177Compiling precomputed-hash v0.1.1Compiling mac v0.1.1Compiling futf v0.1.5Compiling markup5ever v0.14.1Compiling idna_adapter v1.2.1Compiling phf_macros v0.10.0Compiling toml_parser v1.0.4Compiling parking_lot v0.12.5Compiling phf_codegen v0.8.0Compiling cssparser v0.29.6Compiling toml_datetime v0.7.3Compiling semver v1.0.27Compiling serde_spanned v1.0.3Compiling version_check v0.9.5Compiling bitflags v1.3.2Compiling percent-encoding v2.3.2Compiling utf-8 v0.7.6Compiling autocfg v1.5.0Compiling log v0.4.28Compiling dtoa v1.0.10Compiling toml_writer v1.0.4Compiling utf8_iter v1.0.4Compiling toml v0.9.8Compiling idna v1.1.0Compiling indexmap v1.9.3Compiling dtoa-short v0.3.5Compiling tendril v0.4.3Compiling form_urlencoded v1.2.2Compiling selectors v0.24.0Compiling phf v0.10.1Compiling string_cache v0.8.9Compiling uuid v1.18.1Compiling phf v0.11.3Compiling cssparser-macros v0.6.1Compiling ctor v0.2.9Compiling aho-corasick v1.1.4Compiling camino v1.2.1Compiling matches v0.1.10Compiling unic-char-range v0.9.0Compiling regex-syntax v0.8.8Compiling unic-common v0.9.0Compiling convert_case v0.4.0Compiling nodrop v0.1.14Compiling windows-link v0.1.3Compiling alloc-no-stdlib v2.0.4Compiling derive_more v0.99.20Compiling alloc-stdlib v0.2.2Compiling servo_arc v0.2.0Compiling unic-ucd-version v0.9.0Compiling unic-char-property v0.9.0Compiling regex-automata v0.4.13Compiling url v2.5.7Compiling winapi-util v0.1.11Compiling fxhash v0.2.1Compiling match_token v0.1.0Compiling phf v0.8.0Compiling serde_derive_internals v0.29.1Compiling hashbrown v0.12.3Compiling equivalent v1.0.2Compiling find-msvc-tools v0.1.4Compiling schemars v0.8.22Compiling hashbrown v0.16.0Compiling shlex v1.3.0Compiling schemars_derive v0.8.22Compiling cc v1.2.45Compiling indexmap v2.12.0Compiling html5ever v0.29.1Compiling regex v1.12.2Compiling same-file v1.0.6Compiling unic-ucd-ident v0.9.0Compiling brotli-decompressor v5.0.0Compiling cfb v0.7.3Compiling jsonptr v0.6.3Compiling cargo-platform v0.1.9Compiling dyn-clone v1.0.20Compiling bytes v1.10.1Compiling cargo_metadata v0.19.2Compiling http v1.3.1Compiling brotli v8.0.2Compiling json-patch v3.0.1Compiling infer v0.19.0Compiling kuchikiki v0.8.8-speedreaderCompiling urlpattern v0.3.0Compiling walkdir v2.5.0Compiling vswhom-sys v0.1.3Compiling serde-untagged v0.1.9Compiling windows-result v0.3.4Compiling windows-strings v0.4.2Compiling serde_with v3.15.1Compiling windows-interface v0.59.3Compiling windows-implement v0.60.2Compiling glob v0.3.3Compiling dunce v1.0.5Compiling windows-core v0.61.2Compiling tauri-utils v2.8.0Compiling windows-targets v0.52.6Compiling windows-sys v0.59.0Compiling typenum v1.19.0Compiling vswhom v0.1.0Compiling windows-threading v0.1.0Compiling generic-array v0.14.9Compiling rustc_version v0.4.1Compiling winreg v0.55.0Compiling option-ext v0.2.0Compiling dirs-sys v0.5.0Compiling embed-resource v3.0.6Compiling windows-future v0.2.1Compiling windows-numerics v0.2.0Compiling windows-collections v0.2.0Compiling crc32fast v1.5.0Compiling simd-adler32 v0.3.7Compiling heck v0.5.0Compiling windows v0.61.3Compiling tauri-winres v0.3.3Compiling dirs v6.0.0Compiling cargo_toml v0.22.3Compiling webview2-com-sys v0.38.0Compiling crossbeam-utils v0.8.21Compiling raw-window-handle v0.6.2Compiling powerfmt v0.2.0Compiling time-core v0.1.6Compiling adler2 v2.0.1Compiling num-conv v0.1.0Compiling time-macros v0.2.24Compiling miniz_oxide v0.8.9Compiling deranged v0.5.5Compiling tauri-build v2.5.1Compiling cookie v0.18.1Compiling dpi v0.1.2Compiling windows_x86_64_msvc v0.53.1Compiling time v0.3.44Compiling flate2 v1.1.5Compiling block-buffer v0.10.4Compiling crypto-common v0.1.6Compiling fdeflate v0.3.7Compiling windows-version v0.1.7Compiling webview2-com-macros v0.8.0Compiling bitflags v2.10.0Compiling once_cell v1.21.3Compiling unicode-segmentation v1.12.0Compiling cfg_aliases v0.2.1Compiling softbuffer v0.4.6Compiling png v0.17.16Compiling webview2-com v0.38.0Compiling digest v0.10.7Compiling crossbeam-channel v0.5.15Compiling tauri v2.9.2Compiling tauri-runtime v2.9.1Compiling wry v0.53.5Compiling cpufeatures v0.2.17Compiling sha2 v0.10.9Compiling windows-targets v0.53.5Compiling ico v0.4.0Compiling tauri-plugin v2.5.1Compiling lazy_static v1.5.0Compiling base64 v0.22.1Compiling tauri-runtime-wry v2.9.1Compiling tauri-codegen v2.5.0Compiling tao v0.34.5Compiling tauri-plugin-opener v2.5.2Compiling windows-sys v0.60.2Compiling keyboard-types v0.7.0Compiling serialize-to-javascript-impl v0.1.2Compiling pin-project-lite v0.2.16Compiling serialize-to-javascript v0.1.2Compiling tokio v1.48.0Compiling muda v0.17.1Compiling tauri-macros v2.5.0Compiling window-vibrancy v0.6.0Compiling serde_repr v0.1.20Compiling mime v0.3.17Compiling open v5.3.2Compiling t4 v0.1.0 (D:\rust_projects\t4\src-tauri)Finished `release` profile [optimized] target(s) in 13m 14sBuilt application at: D:\rust_projects\t4\src-tauri\target\release\t4.exeInfo Patching binary "D:\\rust_projects\\t4\\src-tauri\\target\\release\\t4.exe" for type msiInfo Verifying wix package
编译完成后,会在 src-tauri\target\release\ 目录下出现可行性文件,双击既可执行。


二、搞清楚tauri的运行机制
搞不懂tauri的机制,这是万万不能容忍的。
Tauri 的核心是「前端(HTML+JS)负责界面交互,后端(Rust)负责核心逻辑 / 系统能力」,这 4 个文件通过 Tauri 提供的 “通信桥梁” 和 “启动机制” 紧密关联,就像一个分工明确的团队 —— 每个文件有专属职责,却又离不开彼此配合。
先给个关联总览:
- 前端:
index.html(界面)+main.js(交互 + 调用后端) - 后端:
lib.rs(核心逻辑 + 暴露接口)+main.rs(应用入口) - 关联核心:Tauri 框架封装了 “前端调用后端 Rust 函数” 的通信通道,以及 “后端支撑前端运行” 的启动流程,不用我们手动写复杂的跨语言调用代码。
1. 逐个拆解文件
(1)index.html:前端的 “门面”—— 负责显示界面
核心作用:
用 HTML 搭建用户能看到、能操作的界面(输入框、按钮、文字),相当于 “店铺的招牌和柜台”。
关键代码与关联:
html
<!-- 引入 main.js,把界面的交互逻辑交给 JS 处理 -->
<script type="module" src="/main.js" defer></script><!-- 问候表单:用户输入姓名、点击提交按钮 -->
<form class="row" id="greet-form"><input id="greet-input" placeholder="请输入姓名..." /><button type="submit">问候</button>
</form>
<!-- 显示后端返回的问候语:由 JS 动态修改内容 -->
<p id="greet-msg"></p>
请注意,form 没有 action 和 method,而是在main.js中加了 JS 事件监听,这是前端开发的常用操作 ——不让浏览器走默认提交流程,而是自己控制数据怎么处理。
- 与其他文件的关联:只和 main.js 关联通过
<script>标签引入 main.js,让 JS 能操作页面元素(比如获取输入框的姓名、把后端返回的问候语显示到greet-msg里)。
概念:
- DOM:HTML 页面的 “骨架”,每个标签(如
<input><button>)都是 DOM 元素,JS 就是通过操作这些元素实现交互。 defer属性:确保 HTML 页面完全加载完后,再执行 main.js,避免 JS 找不到页面元素。
(2)main.js:前端的 “逻辑大脑”—— 负责和后端沟通
核心职责:
处理页面交互(比如点击按钮),通过 Tauri 提供的工具调用后端 Rust 函数,再把后端返回的结果更新到页面上,相当于 “店铺的店员”—— 接收用户需求,传给后台,再把结果反馈给用户。
关键代码与关联:
javascript
// 1. 从 Tauri 核心 API 导入 invoke 函数(重点!通信工具)
const { invoke } = window.__TAURI__.core;// 2. 异步函数:调用后端 Rust 的 greet 函数
async function greet() {// 调用后端函数:第一个参数是 Rust 函数名,第二个是传参greetMsgEl.textContent = await invoke("greet", { name: greetInputEl.value });
}// 3. 页面加载完后,绑定表单提交事件
window.addEventListener("DOMContentLoaded", () => {greetInputEl = document.querySelector("#greet-input"); // 获取输入框元素greetMsgEl = document.querySelector("#greet-msg"); // 获取显示区域元素// 监听表单提交(用户点击“问候”按钮)document.querySelector("#greet-form").addEventListener("submit", (e) => {e.preventDefault(); // 阻止页面刷新(默认表单提交会刷新页面)greet(); // 调用上面的 greet 函数,和后端通信});
});
- 与其他文件的关联:① 和 index.html 关联:通过
document.querySelector获取页面元素,修改元素内容;② 和 lib.rs 关联:通过invoke函数调用 lib.rs 中暴露的greet函数(跨语言通信的核心)。
概念:
invoke函数:Tauri 给前端的 “电话”,前端用它拨打后端 Rust 函数的 “号码”(函数名),还能传 “纸条”(参数),等待后端 “回电”(返回结果)。- 异步函数(
async/await):因为调用后端需要一点时间(比如网络传输、逻辑处理),await会让 JS 等后端返回结果后再继续执行,避免 “还没收到结果就显示空内容”。
(3)lib.rs:Rust 后端的 “核心车间”—— 负责逻辑处理 + 暴露接口
核心作用:
定义具体的业务逻辑(比如生成问候语),通过 Tauri 宏把 Rust 函数暴露给前端,还负责初始化 Tauri 应用(加载插件、注册命令),相当于 “店铺的后台工坊”—— 接收店员(main.js)传来的需求,加工后返回产品(结果)。
关键代码与关联:
rust
// 1. Tauri 命令宏:给 Rust 函数贴“可被前端调用”的标签
#[tauri::command]
fn greet(name: &str) -> String {// 核心逻辑:生成问候语(Rust 处理的业务逻辑)format!("你好,{}!这是来自Rust的问候!", name)
}// 2. 应用初始化+运行函数
pub fn run() {tauri::Builder::default().plugin(tauri_plugin_opener::init()) // 加载插件(处理外部链接打开).invoke_handler(tauri::generate_handler![greet]) // 注册命令:告诉 Tauri 前端能调用 greet 函数.run(tauri::generate_context!()) // 加载应用配置并运行.expect("运行tauri应用程序时出错");
}
- 与其他文件的关联:① 和 main.js 关联:通过
#[tauri::command]宏 +invoke_handler注册,让前端能通过invoke("greet")调用这个 Rust 函数;② 和 main.rs 关联:run函数被 main.rs 的main函数调用,是应用启动的核心逻辑。
概念:
#[tauri::command]宏:Rust 函数的 “对外名片”,告诉 Tauri “这个函数可以被前端调用”,Tauri 会自动处理前端和后端之间的参数转换(比如 JS 的字符串→Rust 的&str)。- 插件(
tauri_plugin_opener):Tauri 提供的 “工具包”,比如这个插件负责处理前端点击链接(如 Tauri 官网链接)时打开浏览器,不用我们自己写打开浏览器的逻辑。 generate_handler![greet]:把贴了 “名片” 的函数(greet)登记到 Tauri 的 “通讯录” 里,前端调用时 Tauri 能快速找到对应的函数。
(4)main.rs:Rust 后端的 “入口大门”—— 负责启动应用
核心作用:
Rust 程序的主入口,调用 lib.rs 的 run 函数启动 Tauri 应用,还能配置系统相关参数(如 Windows 发布版隐藏控制台),相当于 “店铺的大门”—— 打开门(启动程序),里面的工坊(lib.rs)和店员(main.js)才能开始工作。
关键代码与关联:
rust
// 条件编译:发布版(非调试模式)下,Windows 不显示控制台窗口(纯 GUI 应用)
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]// Rust 程序的主入口函数(程序启动时最先执行)
fn main() {// 调用 lib.rs 中的 run 函数,启动 Tauri 应用t4_lib::run()
}
- 与其他文件的关联:只和 lib.rs 关联主入口
main函数直接调用 lib.rs 的run函数,把应用启动的核心逻辑交给 lib.rs 处理(这样拆分是为了让代码结构更清晰,核心逻辑集中在 lib.rs)。
概念:
- 条件编译(
#![cfg_attr(...)]):Rust 的 “环境开关”—— 调试时(写代码测试)显示控制台窗口(方便看错误信息),发布时(给用户用)隐藏控制台,让应用更像纯 GUI 程序。 t4_lib::run():t4_lib是项目的 Rust 库名(对应t4项目名),这里是 “调用库里面的 run 函数”,相当于大门打开后,喊工坊里的人开始工作。
2. 核心关联流程:用户操作→最终结果的完整链路
用 “用户输入姓名,点击问候按钮,显示 Rust 返回的问候语” 这个场景,串起所有文件的协作:
- 用户在 index.html 的输入框输姓名,点击 “问候” 按钮;
- 按钮触发表单提交事件,main.js 中绑定的事件监听器生效,执行
greet函数; - main.js 的
greet函数通过invoke("greet", { name: 输入的姓名 })给 Rust 后端发 “请求”; - Tauri 框架把这个请求转发给 lib.rs,找到注册过的
greet函数,把输入的姓名传给它; - lib.rs 的
greet函数执行逻辑,生成 “你好,XXX!这是来自 Rust 的问候!” 的字符串,返回给 Tauri; - Tauri 把 Rust 的返回结果传回 main.js,
await拿到结果后,把它赋值给greetMsgEl.textContent; - index.html 的
greet-msg元素显示出这个问候语,用户看到最终结果。
3. 搞清了Tauri 的核心机制
- 分工明确:前端(HTML+JS)管 “界面和交互”,后端(Rust)管 “逻辑和系统能力”,互不干扰;
- 通信桥梁:通过 Tauri 的
invoke函数(前端)和#[tauri::command]宏(后端),实现跨语言调用,参数和返回值的转换由 Tauri 自动处理; - 启动链路:main.rs(入口)→ lib.rs(初始化 + 核心逻辑)→ 启动前端页面(HTML+JS),形成完整的应用运行流程。
简单说,Tauri 帮我们解决了 “前端怎么调用 Rust”“Rust 怎么支撑前端运行” 的复杂问题,我们只需要专注写各自擅长的代码:前端写界面交互,Rust 写高效逻辑或系统功能(如文件读写、系统通知)。
