体验rust-tauri

玩一下rust tauri app

dev on mac

  • 不知道为什么在mac上npm权限要root

bash

cargo install create-tauri-app
cargo create-tauri-app
# use typescript, vue 
cd <project-name>
sudo npm i
sudo npm run tauri dev

index.html

  • 输入一下html元素

大体逻辑是

  1. 使用webview2渲染界面,同时打开浏览器开发应用程序界面
  2. rust代码负责后端
  3. vue + ts 负责前端代码
  4. src-tauri是后端目录

主要的文件

  • index.html一个html页面,引用到一个main.ts,main.ts挂载了App.vue组件
  • main.ts
  • component/Greet.vue,被App.vue引用,Greet.vue作为子组件,组件中的ts代码段负责和后端函数连接
  • App.vue 主要显示的组件
  • main.rs后端逻辑实现

看文件

// main.rs
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]



#[tauri::command]
fn greet(name: &str) -> String {
    format!("Hello, {}! You've been greeted from Rust!", name)
}
#[tauri::command]
fn hello(what:&str)->String{
    format!("what do you want,{}",what)
}
fn main() {
    tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![greet, hello])
        // .invoke_handler(tauri::generate_handler![hello])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}


// main.ts
import { createApp } from "vue";
import "./styles.css";
import App from "./App.vue";

createApp(App).mount("#app");

// Greet.vue
<script setup lang="ts">
import { ref } from "vue";
import { invoke } from "@tauri-apps/api/tauri";

const greetMsg = ref("");
const name = ref("");
const helloMsg = ref("");
const what=ref("");
async function greet() {
  greetMsg.value = await invoke("greet", { name: name.value });
}

async function hello() {
  helloMsg.value = await invoke("hello",{ what: what.value});
}
</script>

<template>
  <div class="greet">
    <input id="greet-input" v-model="name" placeholder="Enter a name..." />
    <button type="button" @click="greet()">Greet</button>
    
  </div>
  <div class="hello">
    <!-- v-model 显示what内容 -->
    <input id="hello-input" v-model="what" placeholder="what do you want" />
    <button type="button" @click="hello()">What</button>
    
  </div>
  <p>{{ greetMsg }}</p>
  <p>{{ helloMsg }}</p>

</template>

// App.vue
<script setup lang="ts">
// This starter template is using Vue 3 <script setup> SFCs
// Check out https://vuejs.org/api/sfc-script-setup.html#script-setup
import Greet from "./components/Greet.vue";
</script>

<template>
  <div class="container">
    <Greet />


    
  </div>
</template>



// index.html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Tauri + Vue + TS</title>
  </head>

  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.ts"></script>

  </body>
</html>

再来理一理依赖关系

  1. index.html引入ts文件
  2. ts含有vue组件
  3. vue组件有与后端逻辑的连接
  4. main.rs负责后端逻辑

打包成应用程序

打包前端

# <project-name> folder 
sudo npm run build # generate dist folder

修改后端的tauri.conf.json,然后整个打包

// 主要修改公司id
 "identifier": "你的公司id,如com.baidu.www",

打包在src-tauri/target/release/下,可以看到体积相对有点小

sudo npm run tauri build 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值