Tauri开发手记——1.开发环境

一、搭建环境

1、先在提示符下安装工具

cargo install create-tauri-app --locked

如果安装过了,它会提示,无需担心

复制代码
D:\rust_projects>cargo install create-tauri-app --locked
    Updating `ustc` index
     Ignored 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 · JavaScript

Template created! To get started run:
  cd t4
  npm install
  npm run tauri android init

For Desktop development, run:
  npm run tauri dev

For Android development, run:
  npm run tauri android dev

3、开始运行

安装依赖包:

npm install

复制代码
D:\rust_projects\t4>npm install

added 2 packages, and audited 3 packages in 26s

1 package is looking for funding
  run `npm fund` for details

found 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 dev
     Running DevCommand (`cargo  run --no-default-features --color always --`)
        Info Watching D:\rust_projects\t4\src-tauri for changes...
   Compiling proc-macro2 v1.0.103
   Compiling quote v1.0.42
   Compiling unicode-ident v1.0.22
   Compiling cfg-if v1.0.4
   Compiling serde_core v1.0.228
   Compiling zerocopy v0.8.27
   Compiling smallvec v1.15.1
   Compiling getrandom v0.2.16
   Compiling rand_core v0.6.4
   Compiling litemap v0.8.1
   Compiling syn v2.0.109
   Compiling writeable v0.6.2
   Compiling windows-link v0.2.1
   Compiling itoa v1.0.15
   Compiling serde v1.0.228
   Compiling stable_deref_trait v1.2.1
   Compiling ppv-lite86 v0.2.21
   Compiling siphasher v1.0.1
   Compiling memchr v2.7.6
   Compiling rand_chacha v0.3.1
   Compiling rand v0.8.5
   Compiling icu_properties_data v2.1.1
   Compiling icu_normalizer_data v2.1.1
   Compiling phf_shared v0.11.3
   Compiling fnv v1.0.7
   Compiling phf_generator v0.11.3
   Compiling siphasher v0.3.11
   Compiling getrandom v0.1.16
   Compiling ryu v1.0.20
   Compiling thiserror v2.0.17
   Compiling byteorder v1.5.0
   Compiling utf8_iter v1.0.4
   Compiling synstructure v0.13.2
   Compiling rand_core v0.5.1
   Compiling strsim v0.11.1
   Compiling winnow v0.7.13
   Compiling syn v1.0.109
   Compiling ident_case v1.0.1
   Compiling typeid v1.0.3
   Compiling parking_lot_core v0.9.12
   Compiling log v0.4.28
   Compiling darling_core v0.21.3
   Compiling windows-sys v0.61.2
   Compiling serde_derive v1.0.228
   Compiling zerofrom-derive v0.1.6
   Compiling zerofrom v0.1.6
   Compiling yoke-derive v0.8.1
   Compiling zerovec-derive v0.11.2
   Compiling displaydoc v0.2.5
   Compiling yoke v0.8.1
   Compiling thiserror-impl v2.0.17
   Compiling zerotrie v0.2.3
   Compiling phf_macros v0.11.3
   Compiling zerovec v0.11.5
   Compiling toml_parser v1.0.4
   Compiling tinystr v0.8.2
   Compiling potential_utf v0.1.4
   Compiling icu_locale_core v2.1.1
   Compiling erased-serde v0.4.9
   Compiling toml_writer v1.0.4
   Compiling scopeguard v1.2.0
   Compiling lock_api v0.4.14
   Compiling icu_collections v2.1.1
   Compiling darling_macro v0.21.3
   Compiling icu_provider v2.1.1
   Compiling rand_chacha v0.2.2
   Compiling rand_pcg v0.2.1
   Compiling phf_shared v0.8.0
   Compiling aho-corasick v1.1.4
   Compiling unic-char-range v0.9.0
   Compiling thiserror v1.0.69
   Compiling unic-common v0.9.0
   Compiling proc-macro-hack v0.5.20+deprecated
   Compiling regex-syntax v0.8.8
   Compiling unic-ucd-version v0.9.0
   Compiling unic-char-property v0.9.0
   Compiling rand v0.7.3
   Compiling parking_lot v0.12.5
   Compiling regex-automata v0.4.13
   Compiling darling v0.21.3
   Compiling thiserror-impl v1.0.69
   Compiling phf_shared v0.10.0
   Compiling windows_x86_64_msvc v0.52.6
   Compiling serde_json v1.0.145
   Compiling alloc-no-stdlib v2.0.4
   Compiling bytes v1.10.1
   Compiling new_debug_unreachable v1.0.6
   Compiling getrandom v0.3.4
   Compiling regex v1.12.2
   Compiling alloc-stdlib v0.2.2
   Compiling phf_generator v0.10.0
   Compiling serde_with_macros v3.15.1
   Compiling phf_generator v0.8.0
   Compiling unic-ucd-ident v0.9.0
   Compiling icu_normalizer v2.1.1
   Compiling icu_properties v2.1.1
   Compiling winapi-util v0.1.11
   Compiling phf_codegen v0.11.3
   Compiling string_cache_codegen v0.5.4
   Compiling precomputed-hash v0.1.1
   Compiling mac v0.1.1
   Compiling dunce v1.0.5
   Compiling anyhow v1.0.100
   Compiling markup5ever v0.14.1
   Compiling idna_adapter v1.2.1
   Compiling futf v0.1.5
   Compiling same-file v1.0.6
   Compiling phf_macros v0.10.0
   Compiling phf_codegen v0.8.0
   Compiling brotli-decompressor v5.0.0
   Compiling http v1.3.1
   Compiling cssparser v0.29.6
   Compiling semver v1.0.27
   Compiling toml_datetime v0.7.3
   Compiling serde_spanned v1.0.3
   Compiling percent-encoding v2.3.2
   Compiling utf-8 v0.7.6
   Compiling autocfg v1.5.0
   Compiling bitflags v1.3.2
   Compiling dtoa v1.0.10
   Compiling version_check v0.9.5
   Compiling dtoa-short v0.3.5
   Compiling tendril v0.4.3
   Compiling form_urlencoded v1.2.2
   Compiling indexmap v1.9.3
   Compiling toml v0.9.8
   Compiling uuid v1.18.1
   Compiling brotli v8.0.2
   Compiling phf v0.10.1
   Compiling selectors v0.24.0
   Compiling windows-targets v0.52.6
   Compiling walkdir v2.5.0
   Compiling idna v1.1.0
   Compiling string_cache v0.8.9
   Compiling phf v0.11.3
   Compiling cssparser-macros v0.6.1
   Compiling ctor v0.2.9
   Compiling camino v1.2.1
   Compiling windows-link v0.1.3
   Compiling libc v0.2.177
   Compiling matches v0.1.10
   Compiling nodrop v0.1.14
   Compiling convert_case v0.4.0
   Compiling glob v0.3.3
   Compiling servo_arc v0.2.0
   Compiling derive_more v0.99.20
   Compiling url v2.5.7
   Compiling phf v0.8.0
   Compiling match_token v0.1.0
   Compiling serde_derive_internals v0.29.1
   Compiling fxhash v0.2.1
   Compiling hashbrown v0.12.3
   Compiling schemars v0.8.22
   Compiling find-msvc-tools v0.1.4
   Compiling equivalent v1.0.2
   Compiling shlex v1.3.0
   Compiling hashbrown v0.16.0
   Compiling cc v1.2.45
   Compiling indexmap v2.12.0
   Compiling schemars_derive v0.8.22
   Compiling html5ever v0.29.1
   Compiling cfb v0.7.3
   Compiling jsonptr v0.6.3
   Compiling cargo-platform v0.1.9
   Compiling dyn-clone v1.0.20
   Compiling serde-untagged v0.1.9
   Compiling cargo_metadata v0.19.2
   Compiling json-patch v3.0.1
   Compiling infer v0.19.0
   Compiling kuchikiki v0.8.8-speedreader
   Compiling vswhom-sys v0.1.3
   Compiling urlpattern v0.3.0
   Compiling windows-result v0.3.4
   Compiling windows-strings v0.4.2
   Compiling serde_with v3.15.1
   Compiling windows-implement v0.60.2
   Compiling windows-interface v0.59.3
   Compiling windows-core v0.61.2
   Compiling windows-sys v0.59.0
   Compiling typenum v1.19.0
   Compiling tauri-utils v2.8.0
   Compiling vswhom v0.1.0
   Compiling windows-threading v0.1.0
   Compiling generic-array v0.14.9
   Compiling rustc_version v0.4.1
   Compiling option-ext v0.2.0
   Compiling dirs-sys v0.5.0
   Compiling windows-future v0.2.1
   Compiling windows-collections v0.2.0
   Compiling windows-numerics v0.2.0
   Compiling simd-adler32 v0.3.7
   Compiling winreg v0.55.0
   Compiling crc32fast v1.5.0
   Compiling heck v0.5.0
   Compiling embed-resource v3.0.6
   Compiling tauri-winres v0.3.3
   Compiling windows v0.61.3
   Compiling dirs v6.0.0
   Compiling cargo_toml v0.22.3
   Compiling webview2-com-sys v0.38.0
   Compiling adler2 v2.0.1
   Compiling num-conv v0.1.0
   Compiling powerfmt v0.2.0
   Compiling time-core v0.1.6
   Compiling crossbeam-utils v0.8.21
   Compiling raw-window-handle v0.6.2
   Compiling time-macros v0.2.24
   Compiling deranged v0.5.5
   Compiling tauri-build v2.5.1
   Compiling miniz_oxide v0.8.9
   Compiling cookie v0.18.1
   Compiling dpi v0.1.2
   Compiling windows_x86_64_msvc v0.53.1
   Compiling flate2 v1.1.5
   Compiling time v0.3.44
   Compiling crypto-common v0.1.6
   Compiling block-buffer v0.10.4
   Compiling fdeflate v0.3.7
   Compiling webview2-com-macros v0.8.0
   Compiling bitflags v2.10.0
   Compiling windows-version v0.1.7
   Compiling cfg_aliases v0.2.1
   Compiling once_cell v1.21.3
   Compiling unicode-segmentation v1.12.0
   Compiling softbuffer v0.4.6
   Compiling png v0.17.16
   Compiling tauri v2.9.2
   Compiling digest v0.10.7
   Compiling crossbeam-channel v0.5.15
   Compiling tauri-runtime v2.9.1
   Compiling cpufeatures v0.2.17
   Compiling wry v0.53.5
   Compiling sha2 v0.10.9
   Compiling windows-targets v0.53.5
   Compiling ico v0.4.0
   Compiling tauri-plugin v2.5.1
   Compiling tauri-runtime-wry v2.9.1
   Compiling base64 v0.22.1
   Compiling lazy_static v1.5.0
   Compiling tauri-plugin-opener v2.5.2
   Compiling tauri-codegen v2.5.0
   Compiling windows-sys v0.60.2
   Compiling keyboard-types v0.7.0
   Compiling serialize-to-javascript-impl v0.1.2
   Compiling pin-project-lite v0.2.16
   Compiling tokio v1.48.0
   Compiling muda v0.17.1
   Compiling serialize-to-javascript v0.1.2
   Compiling tauri-macros v2.5.0
   Compiling window-vibrancy v0.6.0
   Compiling serde_repr v0.1.20
   Compiling mime v0.3.17
   Compiling t4 v0.1.0 (D:\rust_projects\t4\src-tauri)
   Compiling open v5.3.2
   Compiling tao v0.34.5
   Compiling webview2-com v0.38.0
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 6m 29s
     Running `target\debug\t4.exe`

启动成功后,会弹出初始示例程序界面。如未弹出或出现错误,那就调吧!

基本上就是以下方法连用:

#先清理原来安装的

cargo clean

#再删掉Cargo.lock

del Cargo.lock

#再运行

cargo tauri dev

当第二次运行该命令时,就不需要重复上述步骤了。如下:

复制代码
D:\rust_projects\t4>cargo tauri dev
     Running 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.05s
     Running `target\debug\t4.exe`

4、可执行文件

如果一切正常,执行以下命令进行编译。

cargo tauri build

初次执行完整的编译需要下载和编译450个库,需要耐心等待。

复制代码
D:\rust_projects\t4>cargo tauri build
        Info Looking up installed tauri packages to check mismatched versions...
   Compiling proc-macro2 v1.0.103
   Compiling unicode-ident v1.0.22
   Compiling quote v1.0.42
   Compiling cfg-if v1.0.4
   Compiling serde_core v1.0.228
   Compiling zerocopy v0.8.27
   Compiling getrandom v0.2.16
   Compiling rand_core v0.6.4
   Compiling icu_properties_data v2.1.1
   Compiling icu_normalizer_data v2.1.1
   Compiling syn v2.0.109
   Compiling serde v1.0.228
   Compiling stable_deref_trait v1.2.1
   Compiling siphasher v1.0.1
   Compiling ppv-lite86 v0.2.21
   Compiling phf_shared v0.11.3
   Compiling rand_chacha v0.3.1
   Compiling smallvec v1.15.1
   Compiling rand v0.8.5
   Compiling thiserror v2.0.17
   Compiling siphasher v0.3.11
   Compiling phf_generator v0.11.3
   Compiling parking_lot_core v0.9.12
   Compiling fnv v1.0.7
   Compiling windows-link v0.2.1
   Compiling getrandom v0.1.16
   Compiling typeid v1.0.3
   Compiling strsim v0.11.1
   Compiling rand_core v0.5.1
   Compiling windows_x86_64_msvc v0.52.6
   Compiling writeable v0.6.2
   Compiling litemap v0.8.1
   Compiling synstructure v0.13.2
   Compiling syn v1.0.109
   Compiling thiserror v1.0.69
   Compiling erased-serde v0.4.9
   Compiling ident_case v1.0.1
   Compiling itoa v1.0.15
   Compiling memchr v2.7.6
   Compiling darling_core v0.21.3
   Compiling getrandom v0.3.4
   Compiling rand_chacha v0.2.2
   Compiling rand_pcg v0.2.1
   Compiling phf_shared v0.8.0
   Compiling zerofrom-derive v0.1.6
   Compiling serde_derive v1.0.228
   Compiling yoke-derive v0.8.1
   Compiling zerovec-derive v0.11.2
   Compiling displaydoc v0.2.5
   Compiling zerofrom v0.1.6
   Compiling yoke v0.8.1
   Compiling zerovec v0.11.5
   Compiling thiserror-impl v2.0.17
   Compiling tinystr v0.8.2
   Compiling icu_locale_core v2.1.1
   Compiling potential_utf v0.1.4
   Compiling zerotrie v0.2.3
   Compiling phf_macros v0.11.3
   Compiling icu_collections v2.1.1
   Compiling icu_provider v2.1.1
   Compiling darling_macro v0.21.3
   Compiling thiserror-impl v1.0.69
   Compiling proc-macro-hack v0.5.20+deprecated
   Compiling anyhow v1.0.100
   Compiling darling v0.21.3
   Compiling rand v0.7.3
   Compiling phf_shared v0.10.0
   Compiling serde_json v1.0.145
   Compiling new_debug_unreachable v1.0.6
   Compiling byteorder v1.5.0
   Compiling scopeguard v1.2.0
   Compiling lock_api v0.4.14
   Compiling phf_generator v0.10.0
   Compiling icu_properties v2.1.1
   Compiling phf_generator v0.8.0
   Compiling serde_with_macros v3.15.1
   Compiling icu_normalizer v2.1.1
   Compiling windows-sys v0.61.2
   Compiling string_cache_codegen v0.5.4
   Compiling phf_codegen v0.11.3
   Compiling winnow v0.7.13
   Compiling ryu v1.0.20
   Compiling libc v0.2.177
   Compiling precomputed-hash v0.1.1
   Compiling mac v0.1.1
   Compiling futf v0.1.5
   Compiling markup5ever v0.14.1
   Compiling idna_adapter v1.2.1
   Compiling phf_macros v0.10.0
   Compiling toml_parser v1.0.4
   Compiling parking_lot v0.12.5
   Compiling phf_codegen v0.8.0
   Compiling cssparser v0.29.6
   Compiling toml_datetime v0.7.3
   Compiling semver v1.0.27
   Compiling serde_spanned v1.0.3
   Compiling version_check v0.9.5
   Compiling bitflags v1.3.2
   Compiling percent-encoding v2.3.2
   Compiling utf-8 v0.7.6
   Compiling autocfg v1.5.0
   Compiling log v0.4.28
   Compiling dtoa v1.0.10
   Compiling toml_writer v1.0.4
   Compiling utf8_iter v1.0.4
   Compiling toml v0.9.8
   Compiling idna v1.1.0
   Compiling indexmap v1.9.3
   Compiling dtoa-short v0.3.5
   Compiling tendril v0.4.3
   Compiling form_urlencoded v1.2.2
   Compiling selectors v0.24.0
   Compiling phf v0.10.1
   Compiling string_cache v0.8.9
   Compiling uuid v1.18.1
   Compiling phf v0.11.3
   Compiling cssparser-macros v0.6.1
   Compiling ctor v0.2.9
   Compiling aho-corasick v1.1.4
   Compiling camino v1.2.1
   Compiling matches v0.1.10
   Compiling unic-char-range v0.9.0
   Compiling regex-syntax v0.8.8
   Compiling unic-common v0.9.0
   Compiling convert_case v0.4.0
   Compiling nodrop v0.1.14
   Compiling windows-link v0.1.3
   Compiling alloc-no-stdlib v2.0.4
   Compiling derive_more v0.99.20
   Compiling alloc-stdlib v0.2.2
   Compiling servo_arc v0.2.0
   Compiling unic-ucd-version v0.9.0
   Compiling unic-char-property v0.9.0
   Compiling regex-automata v0.4.13
   Compiling url v2.5.7
   Compiling winapi-util v0.1.11
   Compiling fxhash v0.2.1
   Compiling match_token v0.1.0
   Compiling phf v0.8.0
   Compiling serde_derive_internals v0.29.1
   Compiling hashbrown v0.12.3
   Compiling equivalent v1.0.2
   Compiling find-msvc-tools v0.1.4
   Compiling schemars v0.8.22
   Compiling hashbrown v0.16.0
   Compiling shlex v1.3.0
   Compiling schemars_derive v0.8.22
   Compiling cc v1.2.45
   Compiling indexmap v2.12.0
   Compiling html5ever v0.29.1
   Compiling regex v1.12.2
   Compiling same-file v1.0.6
   Compiling unic-ucd-ident v0.9.0
   Compiling brotli-decompressor v5.0.0
   Compiling cfb v0.7.3
   Compiling jsonptr v0.6.3
   Compiling cargo-platform v0.1.9
   Compiling dyn-clone v1.0.20
   Compiling bytes v1.10.1
   Compiling cargo_metadata v0.19.2
   Compiling http v1.3.1
   Compiling brotli v8.0.2
   Compiling json-patch v3.0.1
   Compiling infer v0.19.0
   Compiling kuchikiki v0.8.8-speedreader
   Compiling urlpattern v0.3.0
   Compiling walkdir v2.5.0
   Compiling vswhom-sys v0.1.3
   Compiling serde-untagged v0.1.9
   Compiling windows-result v0.3.4
   Compiling windows-strings v0.4.2
   Compiling serde_with v3.15.1
   Compiling windows-interface v0.59.3
   Compiling windows-implement v0.60.2
   Compiling glob v0.3.3
   Compiling dunce v1.0.5
   Compiling windows-core v0.61.2
   Compiling tauri-utils v2.8.0
   Compiling windows-targets v0.52.6
   Compiling windows-sys v0.59.0
   Compiling typenum v1.19.0
   Compiling vswhom v0.1.0
   Compiling windows-threading v0.1.0
   Compiling generic-array v0.14.9
   Compiling rustc_version v0.4.1
   Compiling winreg v0.55.0
   Compiling option-ext v0.2.0
   Compiling dirs-sys v0.5.0
   Compiling embed-resource v3.0.6
   Compiling windows-future v0.2.1
   Compiling windows-numerics v0.2.0
   Compiling windows-collections v0.2.0
   Compiling crc32fast v1.5.0
   Compiling simd-adler32 v0.3.7
   Compiling heck v0.5.0
   Compiling windows v0.61.3
   Compiling tauri-winres v0.3.3
   Compiling dirs v6.0.0
   Compiling cargo_toml v0.22.3
   Compiling webview2-com-sys v0.38.0
   Compiling crossbeam-utils v0.8.21
   Compiling raw-window-handle v0.6.2
   Compiling powerfmt v0.2.0
   Compiling time-core v0.1.6
   Compiling adler2 v2.0.1
   Compiling num-conv v0.1.0
   Compiling time-macros v0.2.24
   Compiling miniz_oxide v0.8.9
   Compiling deranged v0.5.5
   Compiling tauri-build v2.5.1
   Compiling cookie v0.18.1
   Compiling dpi v0.1.2
   Compiling windows_x86_64_msvc v0.53.1
   Compiling time v0.3.44
   Compiling flate2 v1.1.5
   Compiling block-buffer v0.10.4
   Compiling crypto-common v0.1.6
   Compiling fdeflate v0.3.7
   Compiling windows-version v0.1.7
   Compiling webview2-com-macros v0.8.0
   Compiling bitflags v2.10.0
   Compiling once_cell v1.21.3
   Compiling unicode-segmentation v1.12.0
   Compiling cfg_aliases v0.2.1
   Compiling softbuffer v0.4.6
   Compiling png v0.17.16
   Compiling webview2-com v0.38.0
   Compiling digest v0.10.7
   Compiling crossbeam-channel v0.5.15
   Compiling tauri v2.9.2
   Compiling tauri-runtime v2.9.1
   Compiling wry v0.53.5
   Compiling cpufeatures v0.2.17
   Compiling sha2 v0.10.9
   Compiling windows-targets v0.53.5
   Compiling ico v0.4.0
   Compiling tauri-plugin v2.5.1
   Compiling lazy_static v1.5.0
   Compiling base64 v0.22.1
   Compiling tauri-runtime-wry v2.9.1
   Compiling tauri-codegen v2.5.0
   Compiling tao v0.34.5
   Compiling tauri-plugin-opener v2.5.2
   Compiling windows-sys v0.60.2
   Compiling keyboard-types v0.7.0
   Compiling serialize-to-javascript-impl v0.1.2
   Compiling pin-project-lite v0.2.16
   Compiling serialize-to-javascript v0.1.2
   Compiling tokio v1.48.0
   Compiling muda v0.17.1
   Compiling tauri-macros v2.5.0
   Compiling window-vibrancy v0.6.0
   Compiling serde_repr v0.1.20
   Compiling mime v0.3.17
   Compiling open v5.3.2
   Compiling t4 v0.1.0 (D:\rust_projects\t4\src-tauri)
    Finished `release` profile [optimized] target(s) in 13m 14s
       Built application at: D:\rust_projects\t4\src-tauri\target\release\t4.exe
        Info Patching binary "D:\\rust_projects\\t4\\src-tauri\\target\\release\\t4.exe" for type msi
        Info 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 没有 actionmethod,而是在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.rsmain 函数调用,是应用启动的核心逻辑。
概念:
  • #[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.rsrun 函数启动 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.rsrun 函数,把应用启动的核心逻辑交给 lib.rs 处理(这样拆分是为了让代码结构更清晰,核心逻辑集中在 lib.rs)。
概念:
  • 条件编译(#![cfg_attr(...)]):Rust 的 "环境开关"------ 调试时(写代码测试)显示控制台窗口(方便看错误信息),发布时(给用户用)隐藏控制台,让应用更像纯 GUI 程序。
  • t4_lib::run()t4_lib 是项目的 Rust 库名(对应 t4 项目名),这里是 "调用库里面的 run 函数",相当于大门打开后,喊工坊里的人开始工作。

2. 核心关联流程:用户操作→最终结果的完整链路

用 "用户输入姓名,点击问候按钮,显示 Rust 返回的问候语" 这个场景,串起所有文件的协作:

  1. 用户在 index.html 的输入框输姓名,点击 "问候" 按钮;
  2. 按钮触发表单提交事件,main.js 中绑定的事件监听器生效,执行 greet 函数;
  3. main.js 的 greet 函数通过 invoke("greet", { name: 输入的姓名 }) 给 Rust 后端发 "请求";
  4. Tauri 框架把这个请求转发给 lib.rs,找到注册过的 greet 函数,把输入的姓名传给它;
  5. lib.rsgreet 函数执行逻辑,生成 "你好,XXX!这是来自 Rust 的问候!" 的字符串,返回给 Tauri;
  6. Tauri 把 Rust 的返回结果传回 main.js,await 拿到结果后,把它赋值给 greetMsgEl.textContent
  7. index.html 的 greet-msg 元素显示出这个问候语,用户看到最终结果。

3. 搞清了Tauri 的核心机制

  1. 分工明确:前端(HTML+JS)管 "界面和交互",后端(Rust)管 "逻辑和系统能力",互不干扰;
  2. 通信桥梁 :通过 Tauri 的 invoke 函数(前端)和 #[tauri::command] 宏(后端),实现跨语言调用,参数和返回值的转换由 Tauri 自动处理;
  3. 启动链路main.rs(入口)→ lib.rs(初始化 + 核心逻辑)→ 启动前端页面(HTML+JS),形成完整的应用运行流程。

简单说,Tauri 帮我们解决了 "前端怎么调用 Rust""Rust 怎么支撑前端运行" 的复杂问题,我们只需要专注写各自擅长的代码:前端写界面交互,Rust 写高效逻辑或系统功能(如文件读写、系统通知)。

相关推荐
百锦再10 小时前
第14章 智能指针
android·java·开发语言·git·rust·go·错误
John_Rey11 小时前
API 设计哲学:构建健壮、易用且符合惯用语的 Rust 库
网络·算法·rust
勤奋的小小尘11 小时前
第六篇: Rust 中的"静态方法"(关联函数)
rust
勤奋的小小尘11 小时前
第七篇: Rust 多线程与并发编程详解
rust
猛喝威士忌11 小时前
Tauri 和 enigo 你们不许再崩溃啦!
rust·客户端
q***318912 小时前
数据库操作与数据管理——Rust 与 SQLite 的集成
数据库·rust·sqlite
百锦再1 天前
第11章 泛型、trait与生命周期
android·网络·人工智能·python·golang·rust·go
芳草萋萋鹦鹉洲哦1 天前
【Windows】tauri+rust运行打包工具链安装
开发语言·windows·rust
s9123601011 天前
【Rust】m2 mac 编译linux 、aarch、win 程序
rust