Aktualisierung auf v3
Ab v3 ist es möglich, @salesforce/retail-react-app
-Aktualisierungen anzuwenden, indem Sie sie als eine npm-Abhängigkeit hinzufügen und die Erweiterbarkeit von Vorlagen in Ihrem Projekt aktivieren.
Diese Anleitung beschreibt die Vorgehensweise bei der Aktualisierung eines PWA Kit-Projekts von v2.7.x auf v3.0.0.
Wir haben PWA Kit v3 jede Menge neue Funktionalitäten hinzugefügt, unter anderem:
🔨 Erweiterbarkeit von Vorlagen: Reduzieren Sie den Fußabdruck des Codes Ihres Projekts und verringern Sie Entwicklungsaufwand, Betriebskosten sowie Ihr Kopfzerbrechen, das zukünftige Upgrades mit sich bringen können. Nähere Details finden Sie im Leitfaden Erweiterbarkeit von Vorlagen.
🪝 Integration von @salesforce/commerce-sdk-react-"Hooks": Entkoppelt API-Aufrufe von der Implementierung eines Projekts, erlaubt ein Upgrade von API-Aufrufen als Abhängigkeit einer npm-Bibliothek und bietet über TanStack Query viele großartige Funktionalitäten (einschließlich Statusverwaltung usw.). Weitere Einzelheiten hierzu finden Sie in der Commerce SDK React-Dokumentation.
⚛️ Wichtige Aktualisierungen von Anbieterbibliotheken, einschließlich Unterstützung für React 18, Node 16/18 und Chakra 2 und mehr.
Eine der ersten Entscheidungen bei der Migration von v2.7.x auf v3.x ist, ob Sie die Erweiterbarkeit von Vorlagen nutzen wollen. Um in den Genuss der Vorteile dieser Funktionalität zu kommen, müssen Sie mindestens eine Datei aus @salesforcef/retail-react-app
(oder einer anderen erweiterbaren App) importieren. Sie können wählen, wie viele Dateien aus der Basisvorlage vererbt werden sollen, aber Sie müssen sich auf den Import mindestens einer Datei festlegen.
Überlegen Sie dann, wie viele Dateien Sie im mit npx pwa-kit-create-app@2.x
generierten Originalprojekt geändert haben. Einige Kunden arbeiten mit vielen Dateien (möglicherweise Hunderten), aber selbst in diesen Fällen wurden viele davon möglicherweise nicht geändert. Diese unveränderten Dateien sind gute Kandidaten für den Import aus @salesforce/retail-react-app
, aber Sie sollten diesen Prozess vorsichtig und mit jeweils nur einer begrenzten Anzahl von Dateien durchführen. Viele Dateien in @salesforce/retail-react-app
sind ähnlich, aber ihr früherer Zustand in v2.x
der Retail React App von PWA Kit wurde inzwischen geändert. Insbesondere die @salesforce/commerce-sdk-react
-Integration (Einzelheiten zur Migration werden später ausführlicher behandelt) hat dazu geführt, dass eine große Anzahl von Dateien bezüglich ihrer Importe und ihrer Dateistruktur geändert wurden, wobei das gesamte commerce-api
-Verzeichnis - der Ausgangspunkt vieler Vorgänge - aus der App entfernt wurde, was eine Änderung mit erheblichen Auswirkungen darstellt.
Wenn Sie ein Projekt zur Nutzung der Erweiterbarkeit von Vorlagen migrieren, ist zu beachten, dass Version 2.x der PWA Kit-SDKs und der mit npx pwa-kit-create-app@2.x
generierten Projekte keine Abhängigkeit von @salesforce/commerce-sdk-react
besitzen, während der neuere Code @salesforce/retail-react-app@^1.x
diese Bibliothek, die mit viele Dateien interagiert und viele davon ändert, intensiv nutzt. Um eine Vorstellung des Ausmaßes dieser Änderungen zu bekommen, können Sie in diesem GitHub Diff https://github.com/SalesforceCommerceCloud/pwa-kit/compare/release-2.7.x...release-3.0.x?diff=unified#files_bucket einen Vergleich zwischen release-2.7.x
und release-3.0.x
durchführen. Suchen Sie nach @salesforce/commerce-sdk-react
und achten Sie auf alle Ergänzungen, die diesen Import hinzufügen.
Wenn Ihre App versucht, Code gemeinsam mit Version 2.x
(einschließlich des Verzeichnisses app/commerce-api
) zu nutzen, besteht die Gefahr, dass Sie Ihrem Bündel unnötigen Code in den Fällen hinzufügen, in denen dieser Code (in zwei sehr unterschiedlichen Formen) in sowohl dem commerce-api
-Ordner als auch dem npm-Modul @salesforce/commerce-sdk-react
verwendet wird.
Ab v3.0.0 verwendet PWA Kit eine andere Fetch-Strategie: withReactQuery
. Diese Strategie nutzt die React Query-Bibliothek und ermöglicht Abfragen im SSR-Renderdurchgang. Die @salesforce/retail-react-app
verwendet @salesforce/commerce-sdk-react
mit Unterstützung durch react-query
.
Damit Hooks auf der Serverseite funktionieren, müssen Sie Ihre AppConfig
-Komponente mit der neuen übergeordneten Komponente withReactQuery
umschließen.
Bei Projekten, in denen Sie nach der Aktualisierung auf v3
getProps
weiterverwenden möchten, umschließen Sie Ihre AppConfig-Komponente mit der withLegacyGetProps
-Komponente.
Sie können withReactQuery
und withLegacyGetProps
gleichzeitig verwenden.
Ändern Sie die Abhängigkeiten in package.json wie folgt:
Aktualisieren Sie die Engines in package.json, damit sie Node 18 und npm 9 unterstützen. Entfernen Sie @chakra-ui/system
aus peerDependencies
in package.json
, da Version 2 die aktuellste Hauptversion von Chakra ist.
Es gibt einen Fehler mit nswapi
aufgrund einer Abhängigkeit von jest-environment-jsdom
, die mit Chakra 2 nicht kompatibel ist. In einigen Tests, die die Modal
-Komponente verwenden, wird folgender Fehler ausgegeben: ':disabled):not([disabled]' is not a valid selector
. Dieser Fehler betrifft nur Unit-Tests, nicht die Browser-Ausführung. Wir verwenden npm 8 und erzwingen mithilfe von Überschreibungen Version 2.2.2
des nwsapi
-Pakets; Unterstützung für npm 7 wird eingestellt.
Fügen Sie in package.json eine overrides
-Eigenschaft hinzu, um die Paketversion zu erzwingen:
Installieren Sie die Abhängigkeiten für Ihr Projekt mit npm i
neu.
Lesen Sie zur react-hook-form
-Migration die offizielle react-hook-form-Dokumentation. Im PWA-Projekt müssen zwei Stellen geändert werden:
-
Verschieben Sie das "form
errors
"-Objekt in eine weitere Ebene der Zerstörung für Hooks inapp/components/forms/*
, da daserrors
-Objekt in dasformState
-Objekt verschoben wurde. -
Verschieben Sie die Render-Eigenschaften von
Controller
in diefield
-Eigenschaft. Die Rückrufsignatur vonRender
gibt ein Objekt zurück, dasfield
undfieldState
enthält.
Ab React 18 werden Hydrationswarnungen nicht mehr wie in React 17 als Warnungen, sondern als Fehler angezeigt. Zur Unterdrückung dieser potenziellen Fehler, die bei Vorhandensein von Hydrationsfehlern die Erstellung der Anwendung verhindern, waren einige Code-Aktualisierungen erforderlich. Diese Fehler müssen unbedingt behoben werden, um zu gewährleisten, dass die App isomorph rendern kann. Dieser Fehler tritt aufgrund einer Diskrepanz zwischen Server oder Client auf. Beim bedingten Rendering einer Komponente oder einer Seite müssen Sie sicherstellen, dass die Hydration vor dem Rendering von clientspezifischem Code abgeschlossen ist.
Erstellen Sie in Ihrem Projekt eine Hilfsfunktion, die feststellt, ob die Hydratation abgeschlossen ist. Sie können eine integrierte Variable verwenden, die von window.__HYDRATING__
in pwa-kit-react-sdk
bereitgestellt wird.
Fügen Sie diese Funktion überall dort hinzu, wo Sie bedingtes Rendering verwenden. Es gibt ein paar Stellen, an denen die Funktion in einem PWA Kit-Projekt hinzugefügt werden sollte:
Siehe hier.
Wenn Sie ein Browser-Plug-in installiert haben, das das DOM-Rendering behindert, erhalten Sie möglicherweise einen Hydrationsfehler im Footer. Wenn Sie zum Beispiel die LastPass-Erweiterung verwenden, sehen Sie den Fehler in der Subscribe
-Komponente im Footer, da LastPass das Rendering des Browsers übernimmt, um ein Symbol zur Aktivierung des in-field-Popups einzufügen. Wenn diese Übernahme während des Hydrationsprozesses stattfindet, tritt der Fehler auf. Mit einem einfachen Trick können Sie die Reihenfolge der Eingabekomponenten ändern, ohne isHydrated()
zu verwenden:
Wenn Ihr Projekt Komponenten und APIs aus der Bibliothek @chakra-ui/react
verwendet, die sich von denen der Retail React-App-Vorlage unterscheiden, lesen Sie die offizielle Dokumentation zur Chakra 2-Migration.
Zur Unterstützung von Chakra 2 müssen einige Dateien für auf der Retail React App-Vorlage basierende Projekte aktualisiert werden.
Entfernen Sie allowToggle
in der Accordion
-Komponente, da allowMultiple
und allowToggle
in Chakra 2 nicht gleichzeitig verwendet werden können.
In der Footer
-Komponente ist der direkte Import von StylesProvider
aus @chakra-ui/react
veraltet. Sie müssen ihn stattdessen über createStylesContext('Footer')
erstellen.
Richten Sie userEvent
ein, bevor Sie eine Aktion aufrufen, und warten Sie in Unit-Tests, die userEvent
verwenden, auf die Aktion, da in der React-Testbibliothek v14.0.0 alle Benutzeraktionen asynchron sind und der Aufruf von setup
vor der Durchführung von Benutzeraktionen erforderlich ist.
Beispiel:
Weitere Einzelheiten finden Sie in der offiziellen Dokumentation für userEvent aus der Testing-Bibliothek.
Um den wiederholten Aufruf von setup()
in vielen Unit-Tests zu vermeiden, können Sie alternativ hierzu Ihr userEvent
in app/utils/test-util.js
unmittelbar vor dem Rendern der Testkomponenten einrichten und diesen Wert zusammen mit den Render-Ergebnissen zurückgeben, sodass der Test die Benutzeraktionen durchführen kann, ohne setup()
aufrufen zu müssen.
In einem Jest-Setup gibt es eine Mock-Abhängigkeit, die eine Fehlermeldung dahingehend auslösen kann, dass TextDecoder
in jest-setup.js
nicht definiert ist. Fügen Sie Folgendes zu jest-setup.js
hinzu:
Bei der Migration von Version 2.x der PWA Kit-SDKs und der über npx pwa-kit-create-app@2.x
generierten Projekte wurde der @salesforce/commerce-sdk-react
-Code wesentlich überarbeitet, um das app/commerce-api/*
-Verzeichnis zu entfernen. Anstelle dieser Dateien, die API-Anfragen handhaben und als SDK fungieren, ersetzt @salesforce/commerce-sdk-react
diese Funktion. Die Release v3 der SDKs korreliert mit der ersten Release von @salesforce/retail-react-app@^1.x
, da die SDKS diese Bibliothek häufig verwenden.
Die Implementierung von @salesforce/commerce-sdk-react
verändert viele Dateien in der Retail React App. Um eine Vorstellung des Ausmaßes dieser Änderungen zu bekommen, können Sie in diesem GitHub Diff einen Vergleich zwischen release-2.7.x
und release-3.0.x
durchführen und nach @salesforce/commerce-sdk-react
suchen. Achten Sie in den diff-Ergebnissen auf alle Ergänzungen, die diesen Import hinzufügen.