# Templates

Wails génère des projets à partir de modèles pré-créés. Dans la v1, c'était difficile de maintenir un ensemble de projets pour qu'ils restent toujours à jour. Dans v2, pour augmenter l'impact de la communauté sur le projet, quelques nouvelles fonctionnalités ont été ajoutées pour les modèles :

- Possibilité de générer des projets à partir de [Modèles à distance](../reference/cli.mdx#remote-templates)
- Outils pour aider à créer vos propres modèles

## Création de modèles

Pour créer un modèle, vous pouvez utiliser la commande `wails generate template`. Pour générer un modèle par défaut, exécutez :

`wails generate template -name mytemplate`

Cela crée le répertoire "mytemplate" avec les fichiers par défaut :

```shell title=mytemplate/
.
|-- NEXTSTEPS.md
|-- README.md
|-- app.tmpl.go
|-- frontend
|   `-- dist
|       |-- assets
|       |   |-- fonts
|       |   |   |-- OFL.txt
|       |   |   `-- nunito-v16-latin-regular.woff2
|       |   `-- images
|       |       `-- logo-dark.svg
|       |-- index.html
|       |-- main.css
|       `-- main.js
|-- go.mod.tmpl
|-- main.tmpl.go
|-- template.json
`-- wails.tmpl.json
```

### Vue d'ensemble du modèle

Le modèle par défaut consiste en l'ensemble des fichiers et répertoires suivants :

| Nom du fichier / dossier | Description                                      |
| ------------------------ | ------------------------------------------------ |
| NEXTSTEPS.md             | Instructions sur la façon de compléter le modèle |
| README.md                | Le README publié avec le modèle                  |
| app.tmpl.go              | Fichier modèle `app.go`                          |
| frontend/                | Le répertoire contenant les assets du frontend   |
| go.mod.tmpl              | Fichier modèle `go.mod`                          |
| main.tmpl.go             | Fichier modèle `main.go`                         |
| template.json            | Template des metadonnées du projet               |
| wails.tmpl.json          | Fichier modèle `wails.json`                      |

À ce stade, il est conseillé de suivre les étapes dans `NEXTSTEPS.md`.

## Créer un modèle à partir d'un projet existant

Il est possible de créer un modèle à partir d'un projet frontend déjà existant, en passant le chemin du projet lors de la génération du template. Nous allons maintenant parcourir comment créer un modèle Vue 3 :

- Installez le CLI Vue: `npm install -g @vue/cli`
- Créer le projet par défaut : `vue create vue3-base`
  - Sélectionnez `Default (Vue 3) ([Vue 3] babel, eslint)`
- Une fois le projet généré, exécutez :

```shell
> wails generate template -name wails-vue3-template -frontend .\vue3-base\
Extracting base template files...
Migrating existing project files to frontend directory...
Updating package.json data...
Renaming package.json -> package.tmpl.json...
Updating package-lock.json data...
Renaming package-lock.json -> package-lock.tmpl.json...
```

- Le modèle peut maintenant être personnalisé comme spécifié dans le fichier `NEXTSTEPS.md`
- Une fois les fichiers prêts, il peut être testé en exécutant : `wails init -n my-vue3-project -t .\wails-vue3-template\`
- Pour tester le nouveau projet, exécutez : `cd my-vue3-project` puis `wails build`
- Une fois que le projet est compilé, exécutez-le : `.\build\bin\my-vue3-project.exe`
- Vous devriez avoir une application Vue3 pleinement fonctionnelle :

```mdx-code-block
<div className="text--center">
  <img
    src={require("@site/static/img/vue3-template.png").default}
    width="50%"
  />
</div>
```

## Publication de modèles

Pour publier un modèle, il vous faut simplement pousser les fichiers dans GitHub. Les bonnes pratiques suivantes sont encouragées :

- Supprimer tous les fichiers et répertoires indésirables (comme `.git`) de votre répertoire frontend
- Assurez-vous que le fichier `template.json` est complet, spécifiquement `helpurl`.
- Envoyer les fichiers vers GitHub
- Créez un PR sur la page [Community Templates](../community/templates.mdx)
- Annoncer le modèle sur le forum de discussion [Template Announcement](https://github.com/wailsapp/wails/discussions/825)
