Project-Image-Uploader/docs/UPGRADE_PLAN-upgrade-deps-react-node-20251028.md
matthias.lotz 58a1979b89 chore(upgrade): add issue template and upgrade plan for deps upgrade
- Add .github/ISSUES/upgrade-deps-react-node-20251028.md with analysis summary
- Add docs/UPGRADE_PLAN-upgrade-deps-react-node-20251028.md with detailed plan and steps

Branch: upgrade/deps-react-node-20251028
2025-10-28 20:13:57 +01:00

150 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Upgrade-Plan: React, Router, MUI, Node (upgrade/deps-react-node-20251028)
Datum: 2025-10-28
Branch: upgrade/deps-react-node-20251028
## Ziel
Schrittweise und rückfallfähige Aktualisierung der Laufzeit und Frameworks:
- Backend: Node 14 -> Node 18 (LTS) (Schnellwin)
- Frontend: React 17 -> React 18, react-scripts 4 -> 5
- Optional (separat): react-router v5 -> v6
- Optional (iterativ): MUI v4 -> v5 (größere Refactor-Phase)
## Umfang
- Änderungen an `backend/Dockerfile` für Node-Version
- Aktualisierung `frontend/package.json` (react/react-dom/react-scripts)
- CI / Produktions-Build-Pipeline (Dockerfile, prod.sh) Smoke-tests
- Code-Änderungen: Router-Hooks (useHistory → useNavigate), App.js (Switch → Routes), evtl. MUI-Imports
## Schritte (detailliert)
### Phase 0 — Vorbereitung (0.51h)
- Erstelle Branch (bereits erstellt)
- Sicherstellen, dass Tests/Build aktuell grün sind
- Erstelle Backup-Branch oder Tag
### Phase 1 — Node runtime bump (0.52h) [Schnellwin]
Ziel: Backend in Node 18 betreiben
Aktionen:
1. Edit `backend/Dockerfile`: `FROM node:14``FROM node:18` (oder `node:18-slim`)
2. Locally: build & run container
```bash
docker build -t image-uploader-backend-test ./backend
docker run --rm -p 5000:5000 image-uploader-backend-test
# oder: docker compose -f docker-compose.yml up --build backend
```
3. Smoke-test: API Endpoints, DB, uploads
4. Falls native build-errors (sqlite3), ergänze build-essentials in Dockerfile
Akzeptanzkriterien:
- Backend container läuft unter Node 18 ohne runtime-exceptions
### Phase 2 — React 18 & react-scripts 5 (412h)
Ziel: Frontend auf React 18 bringen (nicht MUI noch nicht zwangsläufig)
Aktionen:
1. Update `frontend/package.json`:
- `react` & `react-dom``^18.2.0`
- `react-scripts``^5.0.1`
2. Lokales Install & Build
```bash
cd frontend
npm ci
npm run build
```
3. Fix build-errors (häufig): PostCSS, Webpack-Optionen, kleine API-Änderungen
4. Test dev-mode (`npm start`) und important pages (upload, moderation, slideshow)
Akzeptanzkriterien:
- `npm run build` liefert statische Assets
- Dev server läuft, app funktioniert manuell
### Phase 3 — Router v5 → v6 (26h)
Ziel: Modernisierung der Router-API
Aktionen:
1. Replace `react-router-dom` version in package.json → `^6.x`
2. Code changes:
- `Switch``Routes` + `Route element={<Comp/>}`
- `useHistory()``useNavigate()`
- `withRouter` entfernen
3. Sorgfältige manuelle Tests der Navigation
Akzeptanzkriterien:
- Navigation / Link-Verhalten wie zuvor, Unit/E2E tests grün
### Phase 4 — MUI v4 → v5 (größerer Refactor) (25d)
Ziel: Migration zu MUI v5 mit modernem Styling (sx/styled)
Aktionen:
1. Upgrade Packages: `@mui/material`, `@mui/icons-material`
2. Entweder:
- kurzfristig: `@mui/styles` (Kompatibilitäts-Paket) verwenden, um Zeit zu gewinnen; oder
- langfristig: ersetze `makeStyles`/JSS mit `sx` oder `styled`
3. Theme/Spacing Anpassungen, Icons-Import prüfen
4. UI-Tests und visueller Abgleich
Akzeptanzkriterien:
- Komponenten rendern korrekt, Theme konsistent
### Phase 5 — Tests & Production Build
1. Full Docker production build: `./prod.sh` Option 4
2. E2E / manuelle smoke tests: Upload, Moderation, Slideshow
## Aufwandsschätzung (grobe Orientierung)
- Phase 1 (Node bump): 0.52h
- Phase 2 (React 18): 412h
- Phase 3 (Router v6): 26h
- Phase 4 (MUI v5): 2456h (je nach Umfang)
- Tests / CI / Docs: 48h
Gesamtschätzung (conservative): 310 Arbeitstage (abhängig von MUI scope)
## Hinweise für CI / Docker
- Wenn sqlite3 native gebaut werden muss, Dockerfile benötigt `build-essential` und `python` für node-gyp (oder alternativ use prebuilt binaries).
- Node LTS images: `node:18` oder `node:20` (prüfen, ob alle libs kompatibel)
## Beispiel Patches (starter)
- Backend Dockerfile (quick):
```diff
--- a/backend/Dockerfile
+++ b/backend/Dockerfile
@@
- FROM node:14
+ FROM node:18
```
## Nächste Schritte (konkret für mich)
1. Erstelle PR mit Phase 1 (Node bump) + docs + TODO-Update
2. Nach Freigabe: PR für Phase 2 (React18)
---
Dateien in diesem PR/Branch:
- `.github/ISSUES/upgrade-deps-react-node-20251028.md` (Issue-Template)
- `docs/UPGRADE_PLAN-upgrade-deps-react-node-20251028.md` (dieses Dokument)