Heim > Web-Frontend > js-Tutorial > Erkenntnisse aus der Migration von React CRA & Jest zu Vite & Vitest

Erkenntnisse aus der Migration von React CRA & Jest zu Vite & Vitest

Susan Sarandon
Freigeben: 2024-12-27 06:28:10
Original
264 Leute haben es durchsucht

Lessons Learned Migrating from React CRA & Jest to Vite & Vitest

Dieser Artikel ist für den EDOCODE-Adventskalender 2024, veröffentlicht am 16. Dezember 2024.

Der vorherige Artikel wurde von Taiji Yamada geschrieben, einem Produktmanager bei EDOCODE: Automated Email System Using Notion Webhooks and the No-Code Tool „Make“ (Der Artikel ist auf Japanisch).

Schauen Sie sich auch den Wano-Adventskalender unserer Muttergesellschaft an!

Einführung

Unsere App Gojiberry ist eine Shopify-Umfrage-App, die Händlern hilft, wertvolles Feedback von ihren Kunden zu sammeln.

Von Anfang an haben wir Gojiberry mit testgetriebener Entwicklung (TDD) entwickelt, um sicherzustellen, dass unsere App fehlerfrei ist und wir sicher neue Funktionen veröffentlichen können, ohne bestehende Funktionen zu beeinträchtigen. Diese Grundlage hat es uns ermöglicht, umfangreiche Änderungen, wie die Migration von Create React App (CRA) zu Vite, mit minimaler Unterbrechung vorzunehmen.

Als CRA veraltet war und seine Abhängigkeiten veraltet waren, entschieden wir, dass es an der Zeit war, auf ein modernes Build-Tool zu aktualisieren, das unsere wachsende App besser unterstützen würde. Die große Größe unserer Codebasis erhöhte die Komplexität, aber der Wechsel zu Vite erwies sich als die Mühe wert.

Unser Ziel war die Migration unserer beiden React-Projekte:

  • ? Die Umfrage: Wird Endbenutzern angezeigt, um ihre Antworten zu sammeln.
  • ? Das Admin-Dashboard: Wird von Händlern zum Konfigurieren von Umfragen und zum Anzeigen von Analysen verwendet.

Wenn Sie ein Shopify-Shop-Inhaber sind und umsetzbares Kundenfeedback sammeln möchten, probieren Sie Gojiberry noch heute im Shopify App Store aus!

Motivation für die Migration

CRA hat uns in der Vergangenheit gute Dienste geleistet, wird aber nicht mehr gepflegt und seine Abhängigkeiten sind veraltet. Dies stellte mehrere Herausforderungen dar:

  • ? Veraltete Bibliotheken: Wir konnten nicht auf kritische Bibliotheken wie User-Events v14 aktualisieren, was zu erheblichen Verbesserungen bei der Handhabung asynchroner Tests führte.
  • ? Langsame Tests: Jest-Tests wurden mit der Zeit langsamer und wir wollten die schnelleren Build- und Testzeiten, die Vite und Vitest bieten.
  • ⚖️ Inkonsistentes Verhalten: In den beiden Projekten in unserem Monorepo, die beide dieselbe Version von Benutzerereignissen verwenden, musste eines jede Aktion mit act() umschließen, während das andere dies nicht tat. Diese Inkonsistenz führte zu Verwirrung und verlangsamte die Entwicklung.
Wichtige Änderungen in Benutzerereignissen v14

Eine der größten Verbesserungen in User-Events v14 ist die Anforderung, „await“ für alle Interaktionsmethoden zu verwenden. Dadurch entfällt die Notwendigkeit, Aktionen in „await waitFor“ einzuschließen, wodurch der Testcode sauberer und einfacher zu warten ist.

Vorher (Benutzerereignisse v13):

import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import MyComponent from './MyComponent';

test('updates state on click', async () => {
  render(<MyComponent />);

  userEvent.click(screen.getByRole('button'));

  await waitFor(() => {
    expect(screen.getByText('Updated state')).toBeInTheDocument();
  });
});
Nach dem Login kopieren
Nach dem Login kopieren

Nach (Benutzerereignisse v14):

import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import MyComponent from './MyComponent';

test('updates state on click', async () => {
  render(<MyComponent />);

  userEvent.click(screen.getByRole('button'));

  await waitFor(() => {
    expect(screen.getByText('Updated state')).toBeInTheDocument();
  });
});
Nach dem Login kopieren
Nach dem Login kopieren

Diese Änderung vereinfacht Tests, indem die Notwendigkeit entfällt, Statusänderungen explizit mit waitFor zu verwalten. Entwickler müssen nicht mehr darüber nachdenken, wann „await waitFor“ eingebunden werden soll, da die Bibliothek dies automatisch verarbeitet.

Die Verbesserungen in User-Events v14 und Vitest haben viele dieser Probleme behoben und ein saubereres, schnelleres und konsistenteres Entwicklungserlebnis geboten.

Alternativen berücksichtigt

Bevor wir uns für Vite entschieden haben, haben wir Next.js und Remix evaluiert. Obwohl es sich bei beiden um leistungsstarke Frameworks handelt, erforderten sie erhebliche Änderungen an unserer Codebasis und Infrastruktur:

  • Next.js und Remix:

    • ? Neuorganisation der Codebasis: Bei beiden Frameworks mussten wir unsere Codebasis neu strukturieren, um sie an ihre Konventionen anzupassen, was ein zeitaufwändiger Prozess gewesen wäre.
    • ?️ Infrastrukturänderungen: Bei diesen Frameworks handelt es sich nicht um Single Page Application (SPA)-Frameworks, daher wären für deren Einführung Aktualisierungen unserer Bereitstellungs- und Hosting-Infrastruktur erforderlich gewesen.
    • ⚖️ Übertrieben für unsere Bedürfnisse: Obwohl sie großartige Funktionen für serverseitiges Rendering und Routing bieten, waren diese Funktionen für unseren Anwendungsfall unnötig.
  • Warum wir uns für Vite entschieden haben:

    • ? Minimale Codeänderungen: Vite erforderte fast keine Änderungen an unserer bestehenden Codebasis, was den Übergang unkompliziert und effizient machte.
    • ?️ 1-zu-1-Kompatibilität mit Jest: Da Vitest hochkompatibel mit Jest ist, konnten wir den Großteil unseres Testcodes mit minimalen Anpassungen wiederverwenden.
    • Leistungsverbesserungen: Vite sorgte für schnellere Build-Zeiten und Vitest beschleunigte die Testausführung erheblich.

Durch die Wahl von Vite haben wir die Komplexität der Einführung eines vollwertigen Frameworks vermieden und gleichzeitig die Vorteile eines modernen, leichten Build-Tools genutzt.

Migrationsprozess

Wir sind die Migration systematisch angegangen, da unser Monorepo zwei separate npm-Projekte enthält. So haben wir die Migration durchgeführt:

  1. Beginnen Sie mit dem kleineren Projekt:

    • ?️ Durch die Migration des kleineren Projekts konnten wir potenzielle Fallstricke identifizieren, ohne das größere Projekt zu gefährden.
  2. Migrationsschritte:

    Der Prozess für jedes Projekt folgte diesen Schritten:

    • ? Zu Vite migrieren: Ersetzen Sie CRA durch Vite, beheben Sie alle Fehler und stellen Sie sicher, dass die App korrekt erstellt und ausgeführt wird.
    • ? TypeScript-Fehler beheben: Vite führte strengere TypeScript-Regeln ein und deckte damit Probleme in der Codebasis auf. Durch die Behebung dieser Probleme wurde der Code widerstandsfähiger und Fehlpraktiken wurden reduziert.
    • Migration zu Vitest: Übergangstests von Jest zu Vitest.
    • ? Testfehler beheben: Beheben Sie alle fehlerhaften Tests, die durch Unterschiede in der Handhabung bestimmter Szenarien durch Jest und Vitest verursacht werden.
    • ? Upgrade auf User-Events v14: Aktualisieren Sie die Testbibliothek und beheben Sie fehlerhafte Tests. Während viele Tests manuelle Korrekturen erforderten, waren die meisten Probleme auf falsche Testfälle zurückzuführen, beispielsweise darauf, dass bei Bedarf nicht auf Änderungen des React-Status gewartet wurde. Dies war eine wertvolle Gelegenheit, Fehler in unseren Tests zu erkennen und zu korrigieren.
  3. Wiederholen Sie den Vorgang für das größere Projekt:

    • ? Nach der erfolgreichen Migration des kleineren Projekts haben wir die gleichen Schritte auf das größere Projekt angewendet.

Aufgetretene Herausforderungen

  • ? Fehlerhafte Tests: Die Migration zu Vitest und das Upgrade auf User-Events v14 führten zu zahlreichen Testfehlern. Diese Fehler offenbarten jedoch zugrunde liegende Probleme in unseren Testfällen, wie z. B. fehlende Warteaufrufe für React-Statusänderungen. Die Behebung dieser Probleme verbesserte die Genauigkeit und Zuverlässigkeit unserer Tests.
  • ?️ TypeScript-Striktheit: Die strengeren TypeScript-Regeln von Vite haben problematische Muster in unserem Code aufgedeckt. Obwohl die Behebung dieser Fehler zusätzlichen Aufwand erforderte, war das Endergebnis eine sauberere und belastbarere Codebasis.

Ergebnis

Die Migration von CRA zu Vite hat zusammen mit dem Übergang zu Vitest und User-Events v14 zu erheblichen Verbesserungen unseres Entwicklungsworkflows geführt:

  • Schnellere Build- und Testzeiten: Nach der Migration wird unsere Testsuite nun in 30 % kürzerer Zeit fertiggestellt, was unsere CI-Pipeline erheblich beschleunigt.
  • ? Sofortiges Hot-Reload: Der Hot-Module-Austausch (HMR) von Vite während der Entwicklung erfolgt nahezu augenblicklich, eine enorme Verbesserung gegenüber CRA, wodurch die Entwicklung nahtloser und effizienter wird.
  • ? Verbesserte Testklarheit und Zuverlässigkeit: Das Upgrade auf User-Events v14 und Vitest führte zu saubereren und konsistenteren Tests. Während der Migration wurden viele fehlerhafte Tests behoben, was uns dabei half, versteckte Fehler zu erkennen und die Qualität des Codes insgesamt zu verbessern.
  • ?️ Resiliente Codebasis: Die strengeren TypeScript-Regeln von Vite haben mehrere Bereiche für Verbesserungen in unserem Code aufgedeckt, wodurch die App robuster wurde und die Wahrscheinlichkeit von Fehlpraktiken verringert wurde.

Die Migration hat das Spiel verändert, da sie es uns ermöglicht, schneller zu iterieren und gleichzeitig das Vertrauen in unsere Codebasis aufrechtzuerhalten.

Lessons Learned

Hier sind einige Erkenntnisse aus unserer Erfahrung:

  • ? Klein anfangen: Beginnen Sie mit kleineren Projekten, um Risiken zu reduzieren und den Prozess zu verfeinern.
  • Planen Sie fehlerhafte Tests ein: Erwarten Sie, dass einige Testfälle fehlerhaft werden, und nehmen Sie sich Zeit für deren Behebung. Diese Fehler offenbaren oft tiefere Probleme, die es wert sind, angegangen zu werden.
  • ?️ Strengere Regeln akzeptieren: Während strengere TypeScript-Regeln und Framework-Unterschiede zunächst wie Hindernisse wirken können, führen sie letztendlich zu einer besseren Codebasis.
  • ? Bewerten Sie Frameworks sorgfältig: Wählen Sie Tools aus, die zu Ihrer bestehenden Architektur und Ihren Zielen passen.

Fazit

Die Migration von CRA zu Vite und Vitest hat unseren Arbeitsablauf erheblich verbessert. Wir genießen jetzt schnellere Builds, saubereren Testcode mit User-Events v14 und eine robustere Codebasis dank strengerer TypeScript-Regeln.

Einer der Schlüsselfaktoren, die diesen Übergang reibungsloser machten, war unsere frühe Investition in testgetriebene Entwicklung (TDD). Mit einer umfassenden Testsuite konnten wir sicher massive Änderungen vornehmen, ohne die bestehende Funktionalität zu beeinträchtigen.

Wenn Sie eine ähnliche Migration in Betracht ziehen, hoffen wir, dass unsere Erfahrung wertvolle Erkenntnisse für Ihre Reise liefert.


Morgen, 17. Dezember 2024, wird der Artikel Wechsel von B2C zu B2B: ein Geständnis eines Vermarkters von Amee Xu, einer Produktmarketingmanagerin bei Gojiberry, sein.

Bei der Wano Group stellen wir ein! Wenn Sie interessiert sind, schauen Sie sich bitte unsere offenen Stellen über den untenstehenden Link an:

JOBS | Wano-Gruppe

Das obige ist der detaillierte Inhalt vonErkenntnisse aus der Migration von React CRA & Jest zu Vite & Vitest. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage