Passer au contenu principal

SvelteKit

Ce guide vous guidera à travers la création de votre premiÚre application Tauri en utilisant le framework frontend SvelteKit.

info

Before we continue, make sure you have completed the prerequisites to have a working development environment.

Tauri est un framework pour développer des applications de bureau avec n'importe quel framework frontend et un backend en Rust. Chaque application se compose de deux parties :

  1. Le binaire en Rust qui crĂ©e les fenĂȘtres et expose les fonctionnalitĂ©s natives Ă  ces fenĂȘtres
  2. Le framework frontend de votre choix qui crĂ©e l'interface utilisateur dans la fenĂȘtre

Dans ce qui suit, nous allons d'abord configurer le frontend, puis mettre en place le projet Rust et enfin vous montrer comment communiquer entre les deux.

Voici un aperçu de ce que nous allons construire :

Aperçu de l'application

CrĂ©er le Frontend​

SvelteKit is a Svelte Frontend that is primarily designed for Server-Side Rendering (SSR). Pour faire fonctionner SvelteKit avec Tauri, nous allons désactiver SSR et utiliser @sveltejs/adapter-static pour créer un frontend basé sur Static-Site Generation (SSG).

SvelteKit comes with a scaffolding utility similar to create-tauri-app that can quickly set up a new project with many customization options. Pour ce guide, nous sélectionnerons le modÚle TypeScript , avec ESLint et Prettier activés.

npm create svelte@latest
  1. Project name:
    Ce sera le nom du projet. Il correspond au nom du dossier créé par l'utilitaire mais n'aura aucune importance pour notre application. Vous pouvez utiliser n'importe quel nom que vous voulez ici.

  2. App template
    Nous sélectionnons le Skeleton project pour une structure minimale. Si vous voulez jouer avec un exemple plus complet de SvelteKit, vous pouvez sélectionner l'application de démonstration SvelteKit.

  3. Type checking
    Si vous voulez une vérification de type via JSDoc ou TypeScript dans votre projet. Pour ce guide, nous supposons que vous choisissez TypeScript.

  4. Code linting and formatting
    Si vous voulez commencer votre project avec ESLint pour le code linting et Prettier pour le formatage du code. Il n'y aura pas d'autres mentions Ă  ce sujet dans ce guide, mais nous vous recommandons d'activer ces 2 options.

  5. Browser testing
    SvelteKit offre une prise en charge intégrée de Playwright pour les tests du navigateur. Puisque les API Tauri ne fonctionnent pas dans Playwright, nous vous recommandons de ne pas l'ajouter. Consultez notre documentation WebDriver pour trouver des alternatives en utilisant Selenium ou WebdriverIO au lieu de Playwright.

SvelteKit en mode SSG​

Tous d'abord nous devons installer @sveltejs/adapter-static:

npm install --save-dev @sveltejs/adapter-static@next

Puis mettez Ă  jour l'importation de l'adapter dans le fichier svelte.config.js:

svelte.config.js
import adapter from '@sveltejs/adapter-static' // change l' adaptateur depuis adapter-auto
import preprocess from 'svelte-preprocess'

/** @type {import('@sveltejs/kit').Config} */
const config = {
// Consulter https://github.com/sveltejs/svelte-preprocess
// pour plus d'informations sur le préprocesseur
preprocess: preprocess(),

kit: {
adapter: adapter(),
},
}

export default config

Enfin, nous devons désactiver SSR et activer le prérendu en à la racine +layout.ts fichier (ou +layout.js si vous n'utilisez pas TypeScript) avec ce contenu:

src/routes/+layout.ts
export const prerender = true
export const ssr = false

Note that static-adapter doesn't require you to disable SSR for the whole app but it makes it possible to use APIs that depend on the global window object (like Tauri's API) without Client-side checks.

De plus, si vous préférez un mode d'application à page unique (SPA) plutÎt que SSG, vous pouvez modifier les configurations de l'adaptateur et +layout.ts selon la documentation de l'adaptateur.

CrĂ©er le projet Rust​

Au cƓur de chaque application Tauri se trouve un binaire Rust qui gĂšre les fenĂȘtres, la webview et les appels au systĂšme d'exploitation par le biais d'une crate Rust appelĂ© tauri. Ce projet est gĂ©rĂ© par Cargo, le gestionnaire de paquets officiel et l'outil de construction propulsĂ© par Rust.

Notre CLI Tauri utilise Cargo sous le capot, de sorte que vous avez rarement besoin d'interagir directement avec lui. Cargo dispose de nombreuses autres fonctionnalités utiles qui ne sont pas exposées par notre CLI, comme les tests, le linting et le formatage, alors veuillez vous référer à leur documentation officielle pour en savoir plus.

Installer Tauri CLI

Si vous n'avez pas encore installĂ© le CLI Tauri, vous pouvez le faire avec l'une des commandes ci-dessous. Vous n'ĂȘtes pas sĂ»r de savoir quoi utiliser ? Consultez la section dĂ©diĂ©e dans la FAQ.

npm install --save-dev @tauri-apps/cli@">1.0.0"
For npm to detect Tauri correctly you need to add it to the "scripts" section in your package.json file:
package.json
"scripts": {
"tauri": "tauri"
}

Pour échafauder un projet Rust minimal qui est pré-configuré pour utiliser Tauri, ouvrez un terminal et exécutez la commande suivante :

npm run tauri init

Il vous guidera à travers une série de questions :

  1. Quel est le nom de votre application ?
    Ce sera le nom de votre paquet final et le nom du programme dans votre OS. Vous pouvez utiliser n'importe quel nom que vous voulez ici.

  2. Quel doit ĂȘtre le nom de la fenĂȘtre ?
    Ce sera le nom de la fenĂȘtre principale par dĂ©faut. Vous pouvez utiliser n'importe quel nom que vous voulez ici.

  3. OĂč sont vos ressources web (HTML/CSS/JS) situĂ©s par rapport au fichier <current dir>/src-tauri/tauri.conf.json qui sera crĂ©Ă© ?
    Ce chemin est celui que Tauri chargera votre resources frontend quand vous compiler en mode production.
    Use ../build for this value.

  4. Quelle est l'URL de votre serveur de développement
    Celle - ci peut ĂȘtre soit une URL oĂč est chemin fichier que Tauri chargera pendant le development.
    Use http://localhost:5173 for this value.

  5. Quelle est votre commande de développement frontend ?
    Celle ci est la commande utilisée pour démarrer votre serveur de développement frontend.
    Use npm run dev (make sure to adapt this to use the package manager of your choice).

  6. Quelle est votre commande de build frontend ?
    Celle ci est la commande utilisée pour construire vos fichiers frontend pour la production.
    Use npm run build (make sure to adapt this to use the package manager of your choice).
info

Si vous ĂȘtes familier avec Rust, vous remarquerez que tauri init ressemble beaucoup Ă  init cargo. Vous pouvez simplement utiliser cargo init et ajouter les dĂ©pendances Tauri nĂ©cessaires si vous prĂ©fĂ©rez une installation entiĂšrement manuelle.

La commande tauri init gĂ©nĂšre un dossier appelĂ© src-tauri. C'est une convention pour les applications Tauri de placer tous les fichiers liĂ©s au cƓur de l'application dans ce dossier. Passons rapidement Ă  travers le contenu de ce dossier :

  • cargo.toml
    Fichier manifeste de Cargo. Vous pouvez déclarer les crates Rust dont votre application dépend, les métadonnées de votre application, et bien plus encore. Pour la référence complÚte, voir Format de manifeste de Cargo.

  • tauri.conf.json
    Ce fichier vous permet de configurer et de personnaliser des aspects de votre application Tauri du nom de votre application à la liste des API autorisées. Voir la configuration de l'API de Tauri pour la liste complÚte des options supportées et des explications approfondies pour chacune d'entre elles.

  • src/main.rs
    C'est le point d'entrĂ©e de votre programme Rust et l'endroit oĂč nous dĂ©marrons Tauri. Vous y trouverez deux sections :

    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! ayant qu'un seul but : elle dĂ©sactive la fenĂȘtre d'invite de commande qui s'afficherait normalement sur Windows si vous exĂ©cutez une application groupĂ©e. Si vous ĂȘtes sous Windows, essayez de le commenter et de voir ce qui se passe.

    La fonction main est le point d'entrée et la premiÚre fonction qui est appelée lorsque votre programme s'exécute.

  • icĂŽnes
    Il y a de fortes chances que vous souhaitiez une icÎne élégante pour votre application ! Pour vous permettre de démarrer rapidement, nous avons inclus un ensemble d'icÎnes par défaut. Vous devez les changer avant de publier votre application. Pour en savoir plus sur les différents formats d'icÎnes, consultez le tutoriels sur les icÎnes de Tauri.

Maintenant que nous avons préparé notre frontend et initialisé le projet Rust le fichier tauri.conf.json créé devrait ressembler à ceci :

src-tauri/tauri.conf.json
{
"build": {
// Cette commande s'exécutera lorsque vous exécuterez `tauri build`.
"beforeBuildCommand": "npm run build",
// This command will execute when you run `tauri dev`
"beforeDevCommand": "npm run dev",
"devPath": "http://localhost:5173",
"distDir": "../build"
},

Et c'est tout! Maintenant, vous pouvez exécuter la commande suivante dans votre terminal pour lancer de votre application en mode développement:

npm run tauri dev

FenĂȘtre d&#39;application

Invoquer des commandes​

Tauri vous permet d'améliorer votre frontend avec des capacités natives. Nous appelons ces Commandes, essentiellement des fonctions Rust que vous pouvez appeler depuis votre JavaScript en frontend. Cela vous permet de gérer des traitements ou des appels plus lourds via l'OS dans un code Rust beaucoup plus performant.

Faisons un exemple simple :

src-tauri/src/main.rs
#[tauri::command]
fn greet(name: &str) -> String {
format!("Hello, {}!", name)
}

Une commande est comme n'importe quelle fonction Rust normale, avec l'ajout de la macro d'attribut #[tauri::command] qui permet Ă  votre fonction de communiquer avec le contexte JavaScript.

Enfin, nous devons également parler à Tauri de notre commande nouvellement créée afin qu'elle puisse effectuer les appels en conséquence. Ceci est fait avec la combinaison de la fonction .invoke_handler() et de la macro generate_handler![] que vous pouvez voir ci-dessous :

src-tauri/src/main.rs
fn main() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![greet])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}

Maintenant vous ĂȘtes prĂȘt Ă  appeler votre commande depuis le frontend !

Pour appeler notre commande nouvellement crĂ©Ă©e, nous utiliserons la bibliothĂšque JavaScript @tauri-apps/api. Il offre des moyens d'accĂ©der Ă  des fonctionnalitĂ©s natives telles que le systĂšme de fenĂȘtrage, de fichiers, etc., Ă  travers des abstractions JavaScript. Vous pourrez l'installer Ă  l'aide du gestionnaire de paquets de votre choix:

npm install @tauri-apps/api@">1.0.0"

Avec la bibliothÚque installée, nous pouvons maintenant créer un nouveau composant Svelte. Nous allons le créer dans src/lib/Greet.svelte:

src/lib/Greet.svelte
<script>
import { invoke } from '@tauri-apps/api/tauri'

let name = ''
let greetMsg = ''

async function greet() {
greetMsg = await invoke('greet', { name })
}
</script>

<div>
<input id="greet-input" placeholder="Enter a name..." bind:value="{name}" />
<button on:click="{greet}">Greet</button>
<p>{greetMsg}</p>
</div>

Vous pouvez maintenant ajouter ce composant dans src/routes/+page.svelte:

src/routes/+page.svelte
<script>
import Greet from '../lib/Greet.svelte'
</script>

<h1>Welcome to SvelteKit</h1>
<Greet />

You can now run this with npm run tauri dev and see the result:

Aperçu de l&#39;application

:::astuce

Si vous voulez en savoir plus sur la communication entre Rust et JavaScript, veuillez lire le Tauri Inter-Process Communication guide.

:::