陶里-Rust,JS 和原生應用程序

https://dev.to/giuliano1993/tauri-rust-js-and-native-apps-331a

早上好,大家 MonDEV 快樂!☕️

承諾過的輕鬆一周後,我回來了,為大家帶來更有內容的東西,一直希望能為大家提供一些開發新專案的有趣點子,或者介紹一些對未來可能有用的工具。

我的 2024 年學習 Rust 的決定對於一些人來說或許不算是新鮮事:我已經拖延了一段時間,但在 2023 年底,我決定開始學習,於是開始行動!

這個前言是為了讓你知道,不論是在各種社交平台上、文章中還是在這個通訊中,你會開始看到與這個古老的「螃蟹語言」有關的內容!🦀

那為何不從今天開始談談一些較輕鬆,或者說有些與我們已經看到的東西相關或對我們來說更容易使用的東西呢?

今天我來說說” Tauri “!

你知道那些允許你使用網頁語言來開發原生應用程式的各種工具嗎?它們通常需要中間編譯,在這過程中你會遇到各種問題,這些問題並不總是透明的,並且不太可能用一個與原生開發有著明顯分歧的語言直接解決。當然,還有開發吸引人並且易於使用的界面的易度比較低級別的語言難度較高。

至少這是我的經驗。

Tauri 將兩者最好的部分結合起來:它讓你可以使用 WebView 來構建前端,它是一個我們現在已經非常習慣的對象,主要得益於 Electron,還有其他使用它的相似框架,它允許你啟動一個運行客戶端代碼的窗口,並允許使用 html、css 和 JS(原生或者與我們最喜歡的框架相關聯)。後端完全由 Rust 開發,這樣可以在沒有中間步驟的情況下編譯原生應用程式。

從你的前端,你可以非常簡便地調用你的 Rust 函數。

一個快速的例子(你可以在這個倉庫上找到更完整的版本),展示了這樣的應用程式中前後端之間的通信:

// Processes.vue
//…
async function processes(){
// 調用 rust 方法 processes() 並接收一個字符串
const processes_buffer = await invoke(“processes”);
// 將這些行分割以獲得我們的流程數組
const processes_array = processes_buffer.split(“\r\n”);
//…
}

在我們的後端中,會有

// main.rs
//
#[tauri::command]
fn processes() -> String {
let mut processes = Command::new(“ps”);
let output = processes.output().expect(“The process failed”);
let output_string = str::from_utf8(&output.stdout).unwrap();
format!(“{}”, output_string);
}

當然,如果你從未使用過 Rust,上面程式碼的一些部分可能不太清楚(我希望能盡快補上相關內容),但我確信你已經大致明白了:我們調用 ps 命令來獲取機器上活動進程列表,讀取它們,將它們轉換為字符串以使它們可以在前端使用。

顯然,這是一個非常簡單的例子,主要是為了展示這個程序的兩部分之間的通信。無論如何,一旦完成,我們可以構建我們的程序,得到各種 .exe、.dmg 等文件。

在進行著越來越複雜的 Web 應用程序中,隨著 WebAssembly 慢慢佔據主導地位,了解像 Rust 這樣的低級語言,能夠讓我們開發瀏覽器以及本地原生應用程序的低級組件和功能,我認為這是一個(且有趣,而這總是我每次學習新技術時的最重要的一點😉)正確的選擇。在這種情況下,還擁有我們已經具備廣泛技能的界面應用程式的優勢!

這是我在通訊以及通常在我寫的東西中首次提到 Rust,我打算與 WebAssembly 一起對它進行一些時間的研究!

您認為呢?

但更重要的是,您有竟有看過 Rust 或聽說過 Tauri 嗎?

我想聽聽你的想法,所以無論是在 Dev.to 上還是在 Linkedin 上或者無論您偏好的任何地方,如果您有意願,請告訴我!

與此同時,祝你們一如既往的開心迎接新一周

Happy Coding 0_1

via DEV Community: javascript

February 12, 2024 at 04:02PM

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *