5.8 KiB
5.8 KiB
Upgrade-Plan: React, Router, MUI, Node (upgrade/deps-react-node-20251028)
Status: ✅ ABGESCHLOSSEN (28.–29. Oktober 2025)
Branch: upgrade/deps-react-node-20251028
Zusammenfassung
Alle vier Phasen erfolgreich durchgeführt:
- ✅ Phase 1: Backend Node 14 → 24
- ✅ Phase 2: Frontend React 17 → 18.3.1, react-scripts 5.0.1
- ✅ Phase 3: React Router v5 → v6.30.1
- ✅ Phase 4: MUI v4 → v5.14.0 (mit sx-Migration)
Zusätzliche Arbeiten:
- Entfernung von
@mui/stylesund--legacy-peer-deps - Ersatz von
react-lottiedurchlottie-react - ESLint-Bereinigung
- Dev-Umgebung mit HMR (
Dockerfile.dev+docker-compose.override.yml)
Ergebnisse:
- Alle Container laufen stabil
- Production Builds kompilieren sauber
- Dev-Server mit Live-Reload funktioniert
- Alle Router-Routen funktionieren
- UI/UX unverändert
Ziel
Schrittweise und rückfallfähige Aktualisierung der Laufzeit und Frameworks:
- Backend: Node 14 -> Node 24 ✅
- Frontend: React 17 -> React 18, react-scripts 4 -> 5 ✅
- React Router: v5 -> v6 ✅
- MUI: v4 -> v5 (mit sx-Migration) ✅
Umfang
- Änderungen an
backend/Dockerfilefü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
Tatsächlicher Ablauf und Zeitaufwand
Phase 0 — Vorbereitung ✅
- Branch erstellt:
upgrade/deps-react-node-20251028 - Issue/PR Templates generiert
- Backup-Commits vorbereitet
Phase 1 — Node runtime bump ✅ (Dauer: ~1h)
Durchgeführt:
- ✅
backend/Dockerfile:FROM node:14→FROM node:24 - ✅ Docker Build & Container-Start erfolgreich
- ✅ SQLite DB initialisiert, Backend läuft auf Port 5000
- ✅ Commit:
acdb2fa"chore(backend): upgrade to Node 24"
Ergebnis: Backend läuft stabil unter Node 24.
Phase 2 — React 18 & react-scripts 5 ✅ (Dauer: ~6h)
Durchgeführt:
- ✅
frontend/package.jsonaktualisiert:react&react-dom→^18.3.1react-scripts→5.0.1
- ✅
frontend/src/index.js: Migration zucreateRoot()API - ✅
npm installundnpm run builderfolgreich - ✅ Docker production build erfolgreich
- ✅ Commit:
9353458"chore(frontend): upgrade React to 18.3.1 and migrate to createRoot API"
Ergebnis: React 18 läuft, Production Build kompiliert sauber.
Phase 3 — Router v5 → v6 ✅ (Dauer: ~4h)
Durchgeführt:
- ✅
react-router-dom→^6.28.0(installed6.30.1) - ✅ Code-Änderungen:
<Switch>→<Routes><Route component={...}>→<Route element={<.../>}>useHistory()→useNavigate()- Pfad-Anpassungen für nested routes
- ✅ Alle Routen funktionieren (Upload, Groups, Moderation, Slideshow, 404)
- ✅ Commit:
5ba4634"chore(frontend): migrate react-router-dom v5 to v6"
Ergebnis: Navigation funktioniert vollständig mit Router v6.
Phase 4 — MUI v4 → v5 ✅ (Dauer: ~12h)
Durchgeführt:
- ✅ Packages installiert:
@mui/material@^5.14.0@mui/icons-material@^5.14.0@emotion/react@^11.11.0@emotion/styled@^11.11.0
- ✅ Imports migriert:
@material-ui/*→@mui/* - ✅ Komponenten auf
sxmigriert:UploadProgress.js(Commit:8535e8f)DescriptionInput.js(Commit:4aac9da)MultiImageDropzone.js(Commit:494c09e)MultiUploadPage.js(Commit:182dcb2)SlideshowPage.js(Commit:5b4855a)GroupsOverviewPage.jsund weitere
- ✅
@mui/stylesvollständig entfernt (Commit:a44a85b) - ✅ ESLint-Fixes durchgeführt (Commit:
bf11545)
Ergebnis: Alle Komponenten nutzen MUI v5 mit sx-Styling, keine Legacy-Pakete mehr.
Zusätzliche Arbeiten ✅
Dependency Cleanup
- ✅
react-lottie→lottie-react(Commit:a44a85b)- Peer-Dependency-Konflikt behoben
Loading.jsComponent aktualisiert
- ✅
--legacy-peer-depsausfrontend/Dockerfileentfernt - ✅ Clean
npm installohne Flags
Dev-Umgebung
- ✅
frontend/Dockerfile.deverstellt (Node 18, CRA dev server + nginx) - ✅
docker-compose.override.ymlfür Dev-Overlay- Frontend: http://localhost:3000 (mit HMR)
- Backend: http://localhost:5000 (mit nodemon)
- Bind-Mounts für Live-Editing
- Separate
node_modulesVolumes
- ✅ Dev-Container kompiliert erfolgreich (react-router-dom@6.30.1)
Maintenance
- ✅ Browserslist DB aktualisiert (1.0.30001751)
- ✅ PostCSS Deprecation-Warnung dokumentiert (harmlos, von react-scripts)
Aufwandsschätzung vs. Tatsächlich
| Phase | Geschätzt | Tatsächlich |
|---|---|---|
| Phase 1 (Node) | 0.5–2h | ~1h ✅ |
| Phase 2 (React 18) | 4–12h | ~6h ✅ |
| Phase 3 (Router v6) | 2–6h | ~4h ✅ |
| Phase 4 (MUI v5) | 24–56h | ~12h ✅ |
| Dev-Umgebung | - | ~3h ✅ |
| Tests/Docs | 4–8h | ~2h ✅ |
| Gesamt | 3–10 Tage | ~28h (3.5 Tage) ✅ |
Fazit: Upgrade verlief deutlich schneller als konservativ geschätzt, dank strukturiertem Phasen-Ansatz.
Hinweise für CI / Docker
- Wenn sqlite3 native gebaut werden muss, Dockerfile benötigt
build-essentialundpythonfür node-gyp (oder alternativ use prebuilt binaries). - Node LTS images:
node:18odernode:20(prüfen, ob alle libs kompatibel)
Beispiel Patches (starter)
- Backend Dockerfile (quick):
--- a/backend/Dockerfile
+++ b/backend/Dockerfile
@@
- FROM node:14
+ FROM node:18
Nächste Schritte (konkret für mich)
- Erstelle PR mit Phase 1 (Node bump) + docs + TODO-Update
- 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)