Next.js
Ce guide vous guidera dans la création de votre premiÚre application Tauri en utilisant le framework React Next.js.
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 :
- Le binaire en Rust qui crĂ©e les fenĂȘtres et expose les fonctionnalitĂ©s natives Ă ces fenĂȘtres
- 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 :
CrĂ©er le Frontendâ
Next.js est un framework React qui est fourni avec les capacitĂ©s de rendu cĂŽtĂ© serveur (SSR) et Static-Site Generation (SSG). Pour faire fonctionner Next.js avec Tauri, nous allons utiliser le mode SSG car il ne gĂ©nĂšre que des fichiers statiques pouvant ĂȘtre inclus dans le binaire final.
Next.js est livré avec un utilitaire d'échafaudage similaire à create-tauri-app
qui peut configurer rapidement un nouveau projet à partir de nombreux modÚles prédéfinis. For this guide, we will use the suggested default for all questions, including TypeScript support and the new App Router
feature stabilized in v13.4. In case you use the the old routes/
directory instead or on top of the app/
directory, you still need to change the config as explained in the Next.js Static Exports section but the way you use Tauri specific JS APIs will be different than described below.
- npm
- Yarn
- pnpm
npx create-next-app@latest --use-npm
yarn create next-app --use-yarn
pnpm create next-app --use-pnpm
- Project name
This will be the name of your project. It corresponds to the name of the folder this utility will create but has otherwise no effect on your app. Vous pouvez utiliser n'importe quel nom que vous voulez ici.
Next.js Static Exportsâ
Because Tauri does not have a Node.js runtime you must set Next.js to SSG/SPA mode. This will typically result in faster page loads but also has a few caveats to be aware of, therefore we recommend to carefully read through Next.js' official docs on Static Exports.
These docs also show one required configuration change we will always have to change for a Tauri + Next.js app. To do this, edit the next.config.js
file in the project's root directory and add the following:
/** @type {import('next').NextConfig} */
const nextConfig = {
output: 'export',
}
module.exports = nextConfig
This will change the behavior of the next build
to produce an out/
folder containing the HTML/CSS/JS assets for your application instead of writing them to a .next/
directory specific to Next.js' runtime.
There are a few more possible configuration options, so make sure to read through the Static Exports docs as mentioned above and adapt the configuration file according to the needs of your project.
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.
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
- 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"
Pour échafauder un projet Rust minimal qui est pré-configuré pour utiliser Tauri, ouvrez un terminal et exécutez la commande suivante :
- npm
- Yarn
- pnpm
- Cargo
npm run tauri init
yarn tauri init
pnpm tauri init
cargo tauri init
Il vous guidera à travers une série de questions :
- 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. - 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. - 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../out
for this value. - 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.Usehttp://localhost:3000
for this value. - Quelle est votre commande de développement frontend ?
Celle ci est la commande utilisée pour démarrer votre serveur de développement frontend.Usenpm run dev
for this value (make sure to adapt this to use the package manager of your choice). - Quelle est votre commande de build frontend ?
Celle ci est la commande utilisée pour construire vos fichiers frontend pour la production.Usenpm run build
for this value (make sure to adapt this to use the package manager of your choice).
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, vous ĂȘtes presque prĂȘt Ă lancĂ© votre application. Votre fichier tauri.conf.json
devrait ressembler Ă ceci :
{
"build": {
"beforeBuildCommand": "npm run build",
"beforeDevCommand": "npm run dev",
"devPath": "http://localhost:3000",
"distDir": "../out"
},
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
- Yarn
- pnpm
- bun
- Cargo
npm run tauri dev
yarn tauri dev
pnpm tauri dev
bunx tauri dev
cargo tauri dev
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 :
#[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 :
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
- 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
One important thing to note is that all of Tauri's JS APIs require access to browser-only APIs which means they can only be used in Client Components. If you don't need Server Components you can add 'use client'
at the very top of the app/page.tsx
file, in this guide however, we will create a separate component so that we don't have to convert the whole app.
'use client'
import { useEffect } from 'react'
import { invoke } from '@tauri-apps/api/tauri'
export default function Greet() {
useEffect(() => {
invoke<string>('greet', { name: 'Next.js' })
.then(console.log)
.catch(console.error)
}, [])
// Necessary because we will have to use Greet as a component later.
return <></>
}
Now we will use this component in the default Home
component in app/page.tsx
. Note that it must be in the actual component tree and can't be a simple function call as long as the parent (in this case the Home
component) is a Server Component.
// ...
import Greet from './greet'
export default function Home() {
return (
<main className="flex min-h-screen flex-col items-center justify-between p-24">
<Greet />
...
</main>
)
}
:::astuce
Si vous voulez en savoir plus sur la communication entre Rust et JavaScript, veuillez lire le Tauri Inter-Process Communication guide.
:::