Vite
Questa guida ti guiderà attraverso la creazione della tua prima app Tauri utilizzando lo strumento di generazione del frontend Vite.
Before we continue, make sure you have completed the prerequisites to have a working development environment.
Tauri è un framework per costruire applicazioni desktop con qualsiasi framework Front-end e un nucleo in Rust. Ogni app consiste di due parti:
- Un binario Rust che crea le finestre ed espone le funzionalità native a quelle finestre
- Un Frontend di tua scelta che produce l'Interfaccia Utente all'interno della finestra
Di seguito, strutturiamo prima il Frontend, poi impostiamo il progetto Rust ed infine ti mostriamo come farli comunicare tra di loro.
create-tauri-app
The easiest way to scaffold a new project is the create-tauri-app
utility. It provides opinionated templates for vanilla HTML/CSS/JavaScript and many frontend frameworks like React, Svelte and Yew.
- Bash
- PowerShell
- Cargo
- npm
- Yarn
- pnpm
- Bun
sh <(curl https://create.tauri.app/sh)
irm https://create.tauri.app/ps | iex
cargo install create-tauri-app --locked
cargo create-tauri-app
npm create tauri-app@latest
yarn create tauri-app
pnpm create tauri-app
bunx create-tauri-app
Please note that you do not need to follow the rest of this guide if you use create-tauri-app
, but we still recommend reading it to understand the setup.
Ecco un'anteprima di quello che costruiremo:
Crea il Frontend​
Vite è un impacchettatore e strumento di compilazione che fornisce caratteristiche salvavita come ad esempio l'Hot Module Reloading (HMR) durante lo sviluppo, ma converte inoltre il codice sorgente in HTML, CSS e JavaScript ottimizzati quando compila per produzione. We recommend Vite for its speed, easy configurability and large ecosystem of plugins.
Vite comes with a scaffolding utility similar to create-tauri-app
that can quickly set up a new project from many pre-defined templates. È possibile scegliere tra molti framework frontend quali React, Svelte o Vue. For this guide, we will select the vanilla-ts
template to create a simple project without any frontend framework.
- npm
- Yarn
- pnpm
npm create vite@latest
yarn create vite
pnpm create vite
Project name
This will be the name of your JavaScript project. Corrisponde al nome della cartella che questa utilità creerà , ma non ha alcun effetto sulla tua app. È possibile utilizzare il nome che si desidera.Select a framework
If you plan on using a frontend framework later, this is where you can select it. Per questa guida, supponiamo che tu scelgavanilla
.Select a variant
Vite offers TypeScript and vanilla JavaScript variants for all templates, and you can select the variant here. Consigliamo vivamente TypeScript in quanto ti aiuta a scrivere un codice più sicuro, mantenibile più veloce e più efficiente. Per questa guida, supponiamo che tu scelgavanilla-ts
.
Quando si avvia il frontend tramite il comando vite
, Vite cercherà un file di configurazione chiamato vite.config.ts
all'interno della root del progetto. Vogliamo personalizzare questo file per ottenere la migliore compatibilità con Tauri. Se non è stato creato dallo scaffolding sopra (ad esempio se si utilizza vanilla JavaScript), potrebbe essere necessario creare il vite.config.ts
file nella directory radice del progetto.
Aggiorna il file con il seguente contenuto:
import { defineConfig } from 'vite'
export default defineConfig({
// prevent vite from obscuring rust errors
clearScreen: false,
// Tauri expects a fixed port, fail if that port is not available
server: {
strictPort: true,
},
// to access the Tauri environment variables set by the CLI with information about the current target
envPrefix: ['VITE_', 'TAURI_PLATFORM', 'TAURI_ARCH', 'TAURI_FAMILY', 'TAURI_PLATFORM_VERSION', 'TAURI_PLATFORM_TYPE', 'TAURI_DEBUG'],
build: {
// Tauri uses Chromium on Windows and WebKit on macOS and Linux
target: process.env.TAURI_PLATFORM == 'windows' ? 'chrome105' : 'safari13',
// don't minify for debug builds
minify: !process.env.TAURI_DEBUG ? 'esbuild' : false,
// produce sourcemaps for debug builds
sourcemap: !!process.env.TAURI_DEBUG,
},
})
Note that if you are not using vanilla JavaScript, you must keep the framework-specific plugins that were already in this file.
Crea il progetto Rust​
At the heart of every Tauri app is a Rust binary that manages windows, the webview, and calls to the operating system through a Rust crate called tauri
. Questo progetto è gestito da Cargo, il gestore ufficiale di pacchetti e lo strumento di costruzione tuttofare per Rust.
Tauri CLI utilizza Cargo dietro le quinte quindi raramente è necessario interagire con esso direttamente. Cargo ha molte caratteristiche utili che non sono esposte attraverso la CLI, come testing, linting, e formattazione, quindi invitiamo a riferirsi alla loro documentazione ufficiale per saperne di più.
If you haven't installed the Tauri CLI yet you can do so with one of the below commands. Non sei sicuro quale usare? Dai un'occhiata alla voce FAQ.
- npm
- Yarn
- pnpm
- Bun
- Cargo
npm install --save-dev @tauri-apps/cli@">1.0.0"
"scripts": {
"tauri": "tauri"
}
yarn add -D @tauri-apps/cli@^1.0.0
pnpm add -D @tauri-apps/cli@1
bun add -D @tauri-apps/cli@1.0.0
cargo install tauri-cli --version "^1.0.0"
Per strutturare un progetto Rust minimale preconfigurato per utilizzare Tauri, apri un terminale ed esegui il seguente comando:
- npm
- Yarn
- pnpm
- Cargo
npm run tauri init
yarn tauri init
pnpm tauri init
cargo tauri init
Vi guiderà attraverso una serie di domande:
- What is your app name?
This will be the name of your final bundle and what the OS will call your app. È possibile utilizzare il nome che si desidera. - What should the window title be?
This will be the title of the default main window. You can use any title you want here. - Where are your web assets (HTML/CSS/JS) located relative to the
<current dir>/src-tauri/tauri.conf.json
file that will be created?
This is the path that Tauri will load your frontend assets from when building for production.Use../dist
for this value. - What is the URL of your dev server?
This can be either a URL or a file path that Tauri will load during development.Usehttp://localhost:5173
for this value. - What is your frontend dev command?
This is the command used to start your frontend dev server.Usenpm run dev
(make sure to adapt this to use the package manager of your choice). - What is your frontend build command?
This is the command to build your frontend files.Usenpm run build
(make sure to adapt this to use the package manager of your choice).
Se hai familiarità con Rust, noterai che tauri init
sembra e funziona molto come cargo init
. È possibile utilizzare cargo init
e aggiungere le dipendenze Tauri necessarie se si preferisce una configurazione completamente manuale.
Il comando tauri init
genera una cartella chiamata src-tauri
. È una convenzione per le applicazioni Tauri dove inserire tutti i file correlati al nucleo in questa cartella. Attraversiamo rapidamente i contenuti della cartella:
Cargo.toml
Cargo's manifest file. È possibile dichiarare crates Rust da cui la tua app dipende, metadati sulla tua app, e molto altro. Per il riferimento completo vedi Formato Manifesto di Cargo.tauri.conf.json
This file lets you configure and customize aspects of your Tauri application from the name of your app to the list of allowed APIs. Vedere Configurazione API di Tauri per l'elenco completo delle opzioni supportate e le spiegazioni approfondite per ciascuno.src/main.rs
This is the entry point to your Rust program and the place where we bootstrap into Tauri. Troverete due sezioni in esso:src/main.rs#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
fn main() {
tauri::Builder::default()
.run(tauri::generate_context!())
.expect("error while running tauri application");
}The line beginning with the
cfg!
ha un solo scopo: disattiva la finestra del prompt dei comandi che normalmente apparirebbe su Windows se si eseguisse un app impacchettata. Se sei su Windows, prova a commentarlo e vedi cosa succede.La funzione
main
è il punto di entrata e la prima funzione che viene invocata quando il programma viene eseguito.icons
Chances are you want a snazzy icon for your app! Per farti andare velocemente, abbiamo incluso un set di icone predefinite. Dovresti cambiarli prima di pubblicare la tua applicazione. Scopri di più sui vari formati di icone nella guida delle icone di Tauri.
Now that we have scaffolded our frontend and initialized the Rust project the created tauri.conf.json
file should look like this:
{
"build": {
// This command will execute when you run `tauri build`.
"beforeBuildCommand": "npm run build",
// This command will execute when you run `tauri dev`
"beforeDevCommand": "npm run dev",
"devPath": "http://localhost:5173",
"distDir": "../dist"
},
E questo è tutto! Ora puoi eseguire il seguente comando nel terminale per avviare una build di sviluppo della tua app:
- npm
- Yarn
- pnpm
- bun
- Cargo
npm run tauri dev
yarn tauri dev
pnpm tauri dev
bunx tauri dev
cargo tauri dev
Invoca Comandi​
Tauri lets you enhance your frontend with native capabilities. Chiamiamo queste funzionalità Comandi, sono essenzialmente funzioni Rust che puoi chiamare dal tuo Frontend JavaScript. Questo ti consente di gestire elaborazioni pesanti o chiamate al SO tramite codice Rust più performante.
Facciamo un piccolo esempio:
#[tauri::command]
fn greet(name: &str) -> String {
format!("Ciao, {}!", name)
}
Un Comando è come qualsiasi funzione Rust, con l'aggiunta dell'attributo macro #[tauri::command]
che permette alla tua funzione di comunicare con il contesto JavaScript.
Infine, dobbiamo anche dire a Tauri del nostro nuovo Comando in modo che possa indirizzare le chiamate di conseguenza. Questo è fatto con la combinazione della funzione .invoke_handler()
e della macro generate_handler![]
che puoi vedere sotto:
fn main() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![greet])
.run(tauri::generate_context!())
.expect("Errore nell'eseguire l'applicazione tauri");
}
Now you're ready to call your Command from the frontend!
Per chiamare il nostro nuovo comando useremo la libreria JavaScript @tauri-apps/api
. Fornisce l'accesso a funzionalità di base come finestre, il filesystem e molto altro attraverso convenienti astrazioni JavaScript. È possibile installarlo utilizzando il gestore di pacchetti JavaScript preferito:
- npm
- Yarn
- pnpm
- Bun
npm install @tauri-apps/api@">1.0.0"
yarn add @tauri-apps/api@^1.0.0
pnpm add @tauri-apps/api@1
bun add @tauri-apps/api@1.0.0
Con la libreria installata, è possibile modificare il file main.ts
per chiamare il comando:
import { invoke } from '@tauri-apps/api'
// Ora possiamo chiamare il nostro Comando!
// Fai clic con il pulsante destro sullo sfondo dell'applicazione e aprire gli strumenti da sviluppatore.
// Vedrai "Hello, World!" stampato nella console!
invoke('greet', { name: 'World' })
// `invoke` returns a Promise
.then((response) => console.log(response))
If you want to know more about the communication between Rust and JavaScript, please read the Tauri Inter-Process Communication guide.