Système de build
Système de build unifié
Section intitulée « Système de build unifié »Wails propose un système de build unifié qui compile le code Go, regroupe les assets frontend, intègre le tout dans un exécutable unique et gère les builds spécifiques à chaque plateforme — le tout avec une seule commande.
wails3 buildSortie : Exécutable natif avec tout intégré.
Aperçu du processus de build
Section intitulée « Aperçu du processus de build »[Placehold du diagramme du processus de build]
Phases de build
Section intitulée « Phases de build »1. Phase d’analyse
Section intitulée « 1. Phase d’analyse »Wails analyse votre code Go pour comprendre vos services :
type GreetService struct { prefix string}
func (g *GreetService) Greet(name string) string { return g.prefix + name + "!"}Ce que Wails extrait :
- Nom du service :
GreetService - Nom de la méthode :
Greet - Types des paramètres :
string - Types de retour :
string
Utilisé pour : Générer les liaisons TypeScript
2. Phase de génération
Section intitulée « 2. Phase de génération »Liaisons TypeScript
Section intitulée « Liaisons TypeScript »Wails génère des liaisons typées :
export function Greet(name: string): Promise<string> { return window.wails.Call('GreetService.Greet', name)}Avantages :
- Sécurité des types complète
- Autocomplétion IDE
- Erreurs à la compilation
- Commentaires JSDoc
Build du frontend
Section intitulée « Build du frontend »Votre bundler frontend s’exécute (Vite, webpack, etc.) :
# Exemple Vitevite build --outDir distCe qui se passe :
- JavaScript/TypeScript compilé
- CSS traité et minifié
- Assets optimisés
- Maps source générées (dev uniquement)
- Sortie vers
frontend/dist/
3. Phase de compilation
Section intitulée « 3. Phase de compilation »Compilation Go
Section intitulée « Compilation Go »Le code Go est compilé avec des optimisations :
go build -ldflags="-s -w" -o myapp.exeDrapeaux :
-s: Supprimer la table des symboles-w: Supprimer les informations de débogage DWARF- Résultat : Binaire plus petit (~30% de réduction)
Spécifique à la plateforme :
- Windows :
.exeavec icône intégrée - macOS : Structure de bundle
.app - Linux : Binaire ELF
Intégration des assets
Section intitulée « Intégration des assets »Les assets frontend sont intégrés dans le binaire Go :
//go:embed frontend/distvar assets embed.FSRésultat : Exécutable unique avec tout à l’intérieur.
4. Sortie
Section intitulée « 4. Sortie »Binaire natif unique :
- Windows :
myapp.exe(~15MB) - macOS :
myapp.app(~15MB) - Linux :
myapp(~15MB)
Aucune dépendance (sauf WebView système).
Développement vs Production
Section intitulée « Développement vs Production »Optimisé pour la vitesse :
wails3 devCe qui se passe :
- Démarre le serveur de dev frontend (Vite sur le port 5173)
- Compile Go sans optimisations
- Lance l’application pointant vers le serveur de dev
- Active le rechargement à chaud (hot reload)
- Inclut les maps source
Caractéristiques :
- Rebuilds rapides (<1s pour les changements frontend)
- Aucune intégration d’assets (servis depuis le serveur de dev)
- Symboles de débogage inclus
- Maps source activées
- Logs verbeux
Taille du fichier : Plus grande (~50MB avec les symboles de débogage)
Optimisé pour la taille et les performances :
wails3 buildCe qui se passe :
- Compile le frontend pour la production (minifié)
- Compile Go avec optimisations
- Supprime les symboles de débogage
- Intègre les assets
- Crée un binaire unique
Caractéristiques :
- Code optimisé (minifié, tree-shaken)
- Assets intégrés (pas de fichiers externes)
- Symboles de débogage supprimés
- Pas de maps source
- Logs minimaux
Taille du fichier : Plus petite (~15MB)
Commandes de build
Section intitulée « Commandes de build »Build de base
Section intitulée « Build de base »wails3 buildSortie : build/bin/myapp[.exe]
Build pour une plateforme spécifique
Section intitulée « Build pour une plateforme spécifique »# Build pour Windows (depuis n'importe quel OS)wails3 build -platform windows/amd64
# Build pour macOSwails3 build -platform darwin/amd64wails3 build -platform darwin/arm64
# Build pour Linuxwails3 build -platform linux/amd64Compilation croisée : Build pour n’importe quelle plateforme depuis n’importe quelle plateforme.
Build avec options
Section intitulée « Build avec options »# Répertoire de sortie personnaliséwails3 build -o ./dist/myapp
# Ignorer le build frontend (utiliser l'existant)wails3 build -skipbindings
# Build propre (supprimer le cache)wails3 build -clean
# Sortie verbeusewails3 build -vModes de build
Section intitulée « Modes de build »# Build Debug (inclut les symboles)wails3 build -debug
# Build Production (par défaut, optimisé)wails3 build
# Build Développement (rapide, non optimisé)wails3 build -devbuildConfiguration de build
Section intitulée « Configuration de build »Taskfile.yml
Section intitulée « Taskfile.yml »Wails utilise Taskfile pour la configuration de build :
version: '3'
tasks: build: desc: Build the application cmds: - wails3 build
build:windows: desc: Build for Windows cmds: - wails3 build -platform windows/amd64
build:macos: desc: Build for macOS (Universal) cmds: - wails3 build -platform darwin/amd64 - wails3 build -platform darwin/arm64 - lipo -create -output build/bin/myapp.app build/bin/myapp-amd64.app build/bin/myapp-arm64.app
build:linux: desc: Build for Linux cmds: - wails3 build -platform linux/amd64Exécuter les tâches :
task build:windowstask build:macostask build:linuxFichier d’options de build
Section intitulée « Fichier d’options de build »Créez build/build.json pour une configuration persistante :
{ "name": "My Application", "version": "1.0.0", "author": "Your Name", "description": "Application description", "icon": "build/appicon.png", "outputFilename": "myapp", "platforms": ["windows/amd64", "darwin/amd64", "linux/amd64"], "frontend": { "dir": "./frontend", "install": "npm install", "build": "npm run build", "dev": "npm run dev" }, "go": { "ldflags": "-s -w -X main.version={{.Version}}" }}Intégration des assets
Section intitulée « Intégration des assets »Comment ça marche
Section intitulée « Comment ça marche »Wails utilise le package embed de Go :
package main
import ( "embed" "github.com/wailsapp/wails/v3/pkg/application")
//go:embed frontend/distvar assets embed.FS
func main() { app := application.New(application.Options{ Name: "My App", Assets: application.AssetOptions{ Handler: application.AssetFileServerFS(assets), }, })
app.Window.New() app.Run()}Au moment du build :
- Frontend construit dans
frontend/dist/ - La directive
//go:embedinclut les fichiers - Fichiers compilés dans le binaire
- Le binaire contient tout
Au moment de l’exécution :
- L’application démarre
- Assets servis depuis la mémoire
- Pas d’I/O disque pour les assets
- Chargement rapide
Assets personnalisés
Section intitulée « Assets personnalisés »Intégrez des fichiers supplémentaires :
//go:embed frontend/distvar frontendAssets embed.FS
//go:embed data/*.jsonvar dataAssets embed.FS
//go:embed templates/*.htmlvar templateAssets embed.FSOptimisations de build
Section intitulée « Optimisations de build »Optimisations frontend
Section intitulée « Optimisations frontend »Vite (par défaut) :
export default { build: { minify: 'terser', terserOptions: { compress: { drop_console: true, // Remove console.log drop_debugger: true, }, }, rollupOptions: { output: { manualChunks: { vendor: ['react', 'react-dom'], // Separate vendor bundle }, }, }, },}Résultats :
- JavaScript minifié (~70% de réduction)
- CSS minifié (~60% de réduction)
- Images optimisées
- Tree-shaking appliqué
Optimisations Go
Section intitulée « Optimisations Go »Drapeaux du compilateur :
-ldflags="-s -w"-s: Supprimer la table des symboles (~10% de réduction)-w: Supprimer les informations de débogage DWARF (~20% de réduction)
Optimisations supplémentaires :
-ldflags="-s -w -X main.version=1.0.0"-X: Définir les valeurs des variables au moment du build- Utile pour les numéros de version, dates de build
Compression du binaire
Section intitulée « Compression du binaire »UPX (optionnel) :
# Après le buildupx --best build/bin/myapp.exeRésultats :
- Réduction de taille ~50%Questions about building? Ask in Discord or check the build examples.