Migrieren von Create React App (CRA)
Astros React-Integration (EN) ermöglicht dir, React-Komponenten in Astro-Komponenten zu verwenden, auch komplette React-Projekte wie Create React App (CRA)!
---// Importiere die App-Komponente deines Stammverzeichnissesimport App from '../cra-project/App.jsx';---<!-- Verwende eine Client-Direktive, um deine App zu laden --><App client:load />
Viele Apps werden als komplette React-Apps “einfach funktionieren”, wenn du sie direkt in dein Astro-Projekt mit der React-Integration installierst. Das ist eine gute Möglichkeit, dein Projekt sofort zum Laufen zu bringen und deine App funktionsfähig zu halten, während du zu Astro migrierst.
Mit der Zeit kannst du deine Struktur stückweise in eine Kombination aus .astro
- und .jsx
- Komponenten umbauen. Dabei wirst du merken, dass du weniger React-Komponenten brauchst als du vielleicht denkst!
Hier sind ein paar grundlegende Konzepte und Migrationsstrategien, die dir den Einstieg erleichtern. Nutze den Rest unserer Dokumente und unsere Discord-Community, um weiterzumachen!
Wesentliche Gemeinsamkeiten zwischen CRA und Astro
Abschnitt betitelt „Wesentliche Gemeinsamkeiten zwischen CRA und Astro“-
Die Syntax von
.astro
-Dateien ist ähnlich zu JSX. Astro zu schreiben sollte sich also gewohnt anfühlen. -
Astro verwendet dateienbasierts Routing, und erlaubt spezielle Dateinamen, um dynamische Routen zu erstellen.
-
Astro ist komponenten-basiert, und deine Markupstruktur wird vor und nach der Migration ähnlich sein.
-
Astro hat offizielle Integrationen für React, Preact und Solid (EN), damit kannst du deine vorhandenen JSX-Komponenten verwenden. Beachte, dass in diese Dateien in Astro eine
.jsx
/.tsx
oder.astro
Endung haben müssen. -
Astro unterstützt die Installation von NPM-Paketen, inklusive React-Bibliotheken. Viele deiner vorhandenen Abhängigkeiten werden auch in Astro funktionieren.
Wesentliche Unterschiede zwischen CRA und Astro
Abschnitt betitelt „Wesentliche Unterschiede zwischen CRA und Astro“Wenn du deine CRA-Webseite in Astro nachbilden willst, werden dir einige wichtige Unterschiede auffallen:
-
CRA ist eine Single Page Application (App mit einer einzigen Seite), welche eine
index.js
-Datei als das Stammverzeichnis deines Projekts verwendet. Astro ist eine Multiple Page Application (App mit mehreren Seiten), undindex.astro
ist deine Startseite. -
.astro
-Komponenten sind nicht als exportierte Funktionen geschrieben, die Seitenvorlagen zurückgeben. Stattdessen wirst du deinen Code in einen “Code-Zaun” mit deinem JavaScript-Code und einem Body, der ausschließlich deinen generierten HTML-Code enthält, aufteilen. -
Inhaltsorientiert: Astro wurde als Auslage für deine Inhalte entwickelt und erlaubt dir, interaktive Elemente nur einzubauen, wenn du sie brauchst. Eine existierende CRA-App könnte für ausgiebige client-seitige Interaktivität ausgelegt sein und benötigt vielleicht fortgeschrittene Astro-Techniken, um komplexere Elemente wie Dashboards durch
.astro
-Komponenten zu ersetzen.
Füge deine CRA zu Astro hinzu
Abschnitt betitelt „Füge deine CRA zu Astro hinzu“Deine vorhandene App kann direkt in einem neuen Astro-Projekt gerendert werde, oftmals auch ohne Änderungen an deinem Code.
Erstelle ein neues Astro-Projekt
Abschnitt betitelt „Erstelle ein neues Astro-Projekt“Verwende den create astro
-Befehl, um Astros CLI Wizard zu starten, und wähle ein neues “leeres” Astro-Projekt.
npm create astro@latest
pnpm create astro@latest
yarn create astro@latest
Füge Integrationen und Abhängigkeiten hinzu
Abschnitt betitelt „Füge Integrationen und Abhängigkeiten hinzu“Füge die React-Integration mit dem astro add
-Befehl hinzu. Wenn deine App Tailwind oder MDX verwendet, kannst du mehrere Astro-Integrationen mit einem Befehl hinzufügen:
npx astro add reactnpx astro add react tailwind mdx
pnpm astro add reactpnpm astro add react tailwind mdx
yarn astro add reactyarn astro add react tailwind mdx
Wenn deine CRA-App andere Abhängigkeiten (z.B. NPM-Pakete) benötigt, kannst du diese entweder individuell über die Kommandozeile installieren oder durch das Hinzufügen in die package.json
-Datei deines Astro-Projekts, wenn du danach den Installationsbefehl laufen lässt. Beachte, dass viele, aber nicht alle, React-Abhängigkeiten auch in Astro funktionieren werden.
Füge deine vorhanden App-Dateien hinzu
Abschnitt betitelt „Füge deine vorhanden App-Dateien hinzu“Kopiere deine vorhanden CRA-Projektdateien und Ordner (z.B. components
, hooks
, styles
etc.) in einen neuen Ordner in src/
, während du die Struktur aufrecht erhältst, damit deine App weiterhin funktioniert. Beachte, dass alle .js
-Dateiendungen in .jsx
oder .tsx
umbenannt werden müssen.
Füge keine Konfigurationsdateien hinzu. Du wirst Astros eigene astro.config.mjs
, package.json
und tsconfig.json
bearbeiten können.
Verschiebe den Inhalt des Ordners public/
deiner App (z. B. statische Assets) in den Ordner public/
von Astro.
Ordnerpublic/
- logo.png
- favicon.ico
- …
Ordnersrc/
Ordnercra-project/
- App.jsx
- …
Ordnerpages/
- index.astro
- astro.config.mjs
- package.json
- tsconfig.json
Rendere deine App
Abschnitt betitelt „Rendere deine App“Importiere deine Stammverzeichnis-Komponenten in das Frontmatter von index.astro
und rendere die <App />
-Komponente in deiner Seitenvorlage:
---import App from '../cra-project/App.jsx';---<App client:load />
Deine App benötigt eine Client-Direktive für Interaktivität. Astro rendert deine React-App als statisches HTML, bis du zu client-seitigem JavaScript wechselst.
Benutze client:load
, um sicherzustellen, dass deine App sofort vom Server geladen wird, oder client:only="react"
, um das serverseitige Rendering zu überspringen und deine App komplett clientseitig laufen zu lassen.
Verwandle deine CRA in Astro
Abschnitt betitelt „Verwandle deine CRA in Astro“Nachdem du deine vorhandene App in Astro hinzugefügt hast, willst du wahrscheinlich die App auch in Astro umwandeln!
Du replizierst ein ähnliches komponentenbasiertes Design unter Verwendung von Astro HTML-Vorlagenkomponenten für deine Grundstruktur, während du einzelne React-Komponenten (die selbst ganze Apps sein können!) für Inseln der Interaktivität importierst und einbindest.
Jede Migration sieht anders aus und kann schrittweise durchgeführt werden, ohne dass die Funktionalität deiner App unterbrochen wird. Konvertiere deine Komponenten in deinem eigenen Tempo, sodass deine App mit der Zeit immer mehr von Astro-Komponenten angetrieben wird.
Während du deine React-App konvertierst, entscheidest du, welche React-Komponenten du als Astro-Komponenten umschreibst und welche nicht. Deine einzige Einschränkung besteht darin, dass Astro-Komponenten zwar React-Komponenten importieren können, React-Komponenten jedoch nur andere React-Komponenten importieren dürfen:
---import MyReactComponent from '../components/MyReactComponent.jsx';---<html> <body> <h1>Verwende React-Komponenten direkt in Astro!</h1> <MyReactComponent /> </body></html>