# Compilations manuelles

Le CLI Wails fait beaucoup de travail pour le projet, mais il est parfois souhaitable de construire manuellement votre projet. Ce document discutera des différentes opérations que fait le CLI et des différentes façons d'y parvenir.

## Processus de construction

Lorsque `wails build` ou `wails dev` sont utilisés, le CLI Wails effectue un processus de construction commun:

    - Installation des dépendances frontend
    - Construire le projet frontend
    - Générer des ressources de construction
    - Compiler l'application
    - [optionnel] Compresser l'application

### Installation des dépendances frontend

#### Étapes CLI

- Si l'option `-s` est donné, cette étape est ignorée
- Vérifie `wails.json` pour voir s'il y a une commande install dans `frontend:install`
- S'il n'y en a pas, il saute cette étape
- Si le fichier existe, vérifie si `package.json` existe dans le répertoire du frontend. S'il n'existe pas, il saute cette étape
- Un hash MD5 est générée à partir du contenu du fichier `package.json`
- Il vérifie l'existence de `package.json.md5` et, s'il existe, compare son contenu (une somme MD5) avec celui généré pour voir si le contenu a changé. S'ils sont les mêmes, cette étape est ignorée
- Si `package.json.md5` n'existe pas, il le crée en utilisant la somme MD5 générée
- Si une compilation est maintenant requise, ou si `node_modules` n'existe pas, ou si l'option `-f` est donnée, la commande install est exécutée dans le répertoire frontend

#### Étapes manuelles

Cette étape peut être réalisée à partir de la ligne de commande ou d'un script avec `npm install`.

### Construire le projet frontend

#### CLI Wails

- Si l'option `-s` est donné, cette étape est ignorée
- Vérifie `wails.json` pour voir s'il y a une commande de construction dans la clé `frontend:build`
- S'il n'y en a pas, il saute cette étape
- S'il existe, il est exécuté dans le répertoire du frontend

#### Étapes manuelles

Cette étape peut être réalisée à partir de la ligne de commande ou d'un script avec `npm run build` ou quel que soit le script de construction du frontend.

### Générer les ressources

#### CLI Wails

- Si l'option `-nopackage` est activée, cette étape est ignorée
- Si le fichier `build/appicon.png` n'existe pas, un fichier par défaut est créé
- Pour Windows, voir [ Empaquetage pour Windows](#windows)
- Si `build/windows/icon.ico` n'existe pas, il la créera à partir de l'image `build/appicon.png`.

##### Windows

- If `build/windows/icon.ico` does not exist, it will create it from `build/appicon.png` using icon sizes of 256, 128, 64, 48, 32 and 16. This is done using [winicon](https://github.com/leaanthony/winicon).
- If the `build/windows/<projectname>.manifest` file does not exist, it creates it from a default version.
- Compiles the application as a production build (above)
- Uses [winres](https://github.com/tc-hib/winres) to bundle the icon and manifest into a `.syso` file ready for linking.

#### Étapes manuelles

- Create `icon.ico` using the [winicon](https://github.com/leaanthony/winicon) CLI tool (or any other tool).
- Create / Update a `.manifest` file for your application
- Use the [winres CLI](https://github.com/tc-hib/go-winres) to generate a `.syso` file.

### Compiler l'application

#### CLI Wails

- If the `-clean` flag is provided, the `build` directory is deleted and recreated
- For `wails dev`, the following default Go flags are used: `-tags dev -gcflags "all=-N -l"`
- For `wails build`, the following default Go flags are used: `-tags desktop,production -ldflags "-w -s"`
  - On Windows, `-ldflags "-w -h -H windowsgui"`
- Additional tags passed to the CLI using `-tags` are added to the defaults
- Additional ldflags passed to the CLI using `-ldflags` are added to the defaults
- The `-o` flag is passed through
- The Go compiler specified by `-compiler` will be used for compilation

#### Manual steps

- For dev build, the minimum command would be: `go build -tags dev -gcflags "all=-N -l"`
- For production build, the minimum command would be: `go build -tags desktop,production -ldflags "-w -s -H windowsgui"`
- Ensure that you compile in the same directory as the `.syso` file

### Compress application

#### CLI Wails

- If the `-upx` flag has been given, the `upx` program will be run to compress the application with the default settings
- If `-upxflags` is also passed, these flags are used instead of the default ones

#### Manual steps

- Run `upx [flags]` manually to compress the application.
