Essayons de passer la page de log en react
This commit is contained in:
103
doc/webapp.md
Normal file
103
doc/webapp.md
Normal file
@@ -0,0 +1,103 @@
|
||||
Oui exactement, tu peux clairement séparer ton **backend Go** (PMO logger, serveur UPnP, etc.) de la **web app** dans un nouveau package, par exemple `pmoapp`, et l’embarquer via `embed`. C’est d’ailleurs la meilleure pratique si tu envisages une **application web complète et évolutive**, avec plusieurs pages, routes, et fonctionnalités.
|
||||
|
||||
Voici comment je te conseille de procéder et pourquoi :
|
||||
|
||||
---
|
||||
|
||||
## **1️⃣ Création du package web indépendant**
|
||||
|
||||
```bash
|
||||
mkdir pmoapp
|
||||
cd pmoapp
|
||||
npm create vite@latest web
|
||||
```
|
||||
|
||||
* **Nom du projet** : `web`
|
||||
* **Framework** : React (on garde ton choix initial, populaire et bien documenté pour des interfaces complexes)
|
||||
|
||||
### **Pourquoi React** :
|
||||
|
||||
* Large écosystème (bibliothèques UI, state management, routing)
|
||||
* Réactivité naturelle pour les flux temps réel (comme SSE)
|
||||
* Compatible avec TypeScript, ce qui est pratique si ton projet Go devient complexe et que tu veux des typings fiables.
|
||||
|
||||
### **Choix du langage**
|
||||
|
||||
Les options que tu as :
|
||||
|
||||
| Option | Avantages | Quand la choisir |
|
||||
| --------------------------- | ------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
|
||||
| **TypeScript** (recommandé) | Typage statique, moins d’erreurs runtime, meilleur pour projet long terme | Quand tu commences un projet sérieux et que tu veux scalabilité et sécurité |
|
||||
| TypeScript + SWC | SWC compile plus vite que Vite/TS, utile pour gros projets | Si tu vises build ultra-rapide et dev rapide |
|
||||
| JavaScript | Simple, pas de compilation typée | Pour prototypage rapide ou projet temporaire |
|
||||
| JavaScript + SWC | JS mais compilation rapide | Peu utilisé, peu d’intérêt si tu ne fais pas du JS lourd |
|
||||
|
||||
**✅ Recommandation : TypeScript classique**
|
||||
|
||||
* Tu as un projet qui va évoluer et peut devenir complexe
|
||||
* Les types aident à maintenir la cohérence avec le backend Go (ex : typage des logs, props des composants, etc.)
|
||||
* Tu n’as pas besoin de SWC pour l’instant, Vite est déjà très rapide pour dev et build
|
||||
|
||||
---
|
||||
|
||||
## **2️⃣ Ajouter un build statique pour embed**
|
||||
|
||||
Dans ton Go package `pmoapp`, crée un fichier `web.go` :
|
||||
|
||||
```go
|
||||
package pmoapp
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"io/fs"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
//go:embed web/dist/*
|
||||
var AppRoot embed.FS
|
||||
|
||||
// Expose static files
|
||||
func Handler(mux *http.ServeMux) {
|
||||
fsys, _ := fs.Sub(AppRoot, "web/dist")
|
||||
mux.Handle("/app/", http.StripPrefix("/app/", http.FileServer(http.FS(fsys))))
|
||||
mux.HandleFunc("/app", func(w http.ResponseWriter, r *http.Request) {
|
||||
http.ServeFile(w, r, "web/dist/index.html")
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
**Pourquoi :**
|
||||
|
||||
* `/app` → sert l’entrée de l’application (`index.html`)
|
||||
* `/app/` → sert tous les assets statiques générés par Vite (`dist/`)
|
||||
* Avec `embed.FS`, ton build React est complètement **embarqué dans le binaire Go**, tu n’as pas besoin de Node en production.
|
||||
|
||||
---
|
||||
|
||||
## **3️⃣ Workflow futur**
|
||||
|
||||
1. Développer le frontend dans `pmoapp/web` avec React/TypeScript.
|
||||
2. À chaque modification :
|
||||
|
||||
```bash
|
||||
cd pmoapp/web
|
||||
npm run build
|
||||
```
|
||||
|
||||
3. Ton backend Go peut **réutiliser la même variable `AppRoot`** pour servir les pages.
|
||||
|
||||
Tu pourras ensuite :
|
||||
|
||||
* Ajouter des routes React (`react-router-dom`)
|
||||
* Ajouter des pages dynamiques
|
||||
* Utiliser des composants pour logs, dashboard, configuration, etc.
|
||||
|
||||
---
|
||||
|
||||
Si tu veux, je peux te préparer **l’arborescence complète recommandée pour ton projet Go + React**, avec :
|
||||
|
||||
* `pmolog` pour le logger SSE
|
||||
* `pmoapp` pour la web app React
|
||||
* Embedding automatique du build Vite dans le binaire Go
|
||||
|
||||
Veux‑tu que je fasse ça ?
|
||||
Reference in New Issue
Block a user