Zum Inhalt springen

Toolchain from Scratch

Create-Scripts wie npm create vite@latest sind praktisch — aber sie stellen Fragen, die Einsteiger oft nicht beantworten können, und erzeugen Projekte mit Dateien, deren Zweck unklar bleibt. Diese Seite baut ein vollständiges React-Dev-Setup von einem leeren Ordner aus auf — Schritt für Schritt, Werkzeug für Werkzeug.

Drei Gründe, warum es sich lohnt, ein React-Projekt einmal manuell aufzusetzen:

  1. Create-Scripts stellen Fragen, die du noch nicht beantworten kannst — TypeScript oder JavaScript? SWC oder Babel? Das verunsichert, wenn man gerade erst anfängt.
  2. Generierte Projekte enthalten Dateien, die du nicht verstehstvite.config.js, eslint.config.js, package.json-Scripts — alles auf einmal.
  3. Von Grund auf bauen = jede Schicht verstehen — Du fügst ein Werkzeug nach dem anderen hinzu und siehst genau, was es tut.

Erstelle einen neuen Ordner und lege eine minimale package.json an — nur name und type, sonst nichts:

Terminal-Fenster
mkdir mein-projekt
cd mein-projekt
package.json
{
"name": "mein-projekt",
"type": "module"
}

"type": "module" sorgt dafür, dass Node alle .js-Dateien als ES-Module behandelt — das brauchen wir für die modernen import-Syntax.

Erstelle außerdem eine index.html — das ist der Einstiegspunkt für den Browser:

index.html
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8" />
<title>Mein React-Projekt</title>
</head>
<body>
<div id="root"></div>
</body>
</html>

Der <div id="root"> ist der Platzhalter, in den React später die UI rendert.

Installiere Vite als Entwicklungsabhängigkeit:

Terminal-Fenster
npm install --save-dev vite

Füge ein Start-Script in die package.json ein:

package.json
{
"name": "mein-projekt",
"type": "module",
"scripts": {
"dev": "vite"
}
}

Starte den Dev-Server:

Terminal-Fenster
npm run dev

Vite öffnet einen lokalen Server (standardmäßig http://localhost:5173) und liefert deine index.html aus. Änderungen an Dateien werden sofort im Browser sichtbar — ohne manuellen Reload.

Installiere react und react-dom:

Terminal-Fenster
npm install react react-dom
  • react — die Kernbibliothek mit Hooks, Komponenten-Logik usw.
  • react-dom — verbindet React mit dem Browser-DOM

Erstelle src/main.jsx — hier startet deine React-App:

src/main.jsx
import { createRoot } from 'react-dom/client'
const root = createRoot(document.getElementById('root'))
root.render(<h1>Hallo React!</h1>)

Damit Vite diese Datei lädt, muss index.html sie als Skript einbinden:

index.html
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8" />
<title>Mein React-Projekt</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>
</body>
</html>

Vite kann .jsx-Dateien bereits ohne Plugin verarbeiten. Das Plugin übernimmt aber zwei Dinge, die du sonst manuell konfigurieren müsstest:

Installiere das offizielle React-Plugin für Vite:

Terminal-Fenster
npm install --save-dev @vitejs/plugin-react

Erstelle vite.config.js und binde das Plugin ein:

vite.config.js
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
})

Das Plugin übernimmt zwei Dinge:

  • JSX-Konfiguration — die richtige JSX-Einstellung für React, ohne manuellen Konfigurationsaufwand.
  • Fast Refresh — Komponenten aktualisieren sich im Browser, ohne den State zu verlieren.

Lagere die UI in eine eigene Komponente aus. Konvention: Komponenten kommen in src/, Assets (Bilder, Fonts) in public/.

src/App.jsx
export default function App() {
return <h1>Hallo React!</h1>
}
src/main.jsx
import { createRoot } from 'react-dom/client'
import App from './App'
createRoot(document.getElementById('root')).render(<App />)

Die fertige Ordnerstruktur:

mein-projekt/
├── public/
├── src/
│ ├── App.jsx
│ └── main.jsx
├── index.html
├── package.json
└── vite.config.js

Am Ende hast du dasselbe Ergebnis wie npm create vite@latest — aber du verstehst jede Datei und jede Abhängigkeit:

WerkzeugWas es tut
npmPakete verwalten
ViteDev-Server + Bundler
React + ReactDOMUI-Bibliothek + DOM-Anbindung
@vitejs/plugin-reactJSX-Konfiguration + Fast Refresh