„Möglicherweise benötigen Sie einen zusätzlichen Loader, um das Ergebnis dieser Loader zu verarbeiten.“
Lesezeit: 5 Minuten
BennoDev
Ich versuche derzeit, eine State Management Library für ReactJs zu erstellen. Aber sobald ich es in mein React-Projekt (erstellt mit create-react-app), fängt es an, diesen Fehler zu löschen:
Failed to compile.
path/to/agile/dist/runtime.js 116:104
Module parse failed: Unexpected token (116:104)
File was processed with these loaders:
* ./node_modules/babel-loader/lib/index.js
You may need an additional loader to handle the result of these loaders.
| if (subscriptionContainer instanceof sub_1.CallbackContainer) subscriptionContainer.callback(); // If Component based subscription call the updateMethod which every framework has to define
|
> if (subscriptionContainer instanceof sub_1.ComponentContainer) if (this.agileInstance.integration?.updateMethod) this.agileInstance.integration?.updateMethod(subscriptionContainer.component, Runtime.formatChangedPropKeys(subscriptionContainer));
| }); // Log Job
|
Wenn ich die im Fehler erwähnten hervorgehobenen Codezeilen auskommentiere, springt es an eine andere Stelle und beschwert sich dort. Es kann sich aber nicht um einen Syntaxfehler handeln, denn dann würde sich TypeScript auch in der IDE beschweren.
So funktioniert das Tool:
Zu Beginn müssen Sie ein Framework definieren, in diesem Fall React. Anschließend können Sie einen Status erstellen und diesen Status über einen Hook einer React-Funktionskomponente abonnieren. Der Hook, der zum Binden des Status an die React-Komponente verwendet wird, erstellt einfach einen Rückruf, der ein erneutes Rendern auslöst (durch Mutieren eines useReducer) und weist diesen Rückruf dem abonnierten Zustand zu.
Das Problem ist, dass Sie ES2020 ausgeben dist/. Wenn Sie sich die Zeile ansehen, über die es sich beschwert:
if (subscriptionContainer instanceof sub_1.ComponentContainer) if (this.agileInstance.integration?.updateMethod) this.agileInstance.integration?.updateMethod(subscriptionContainer.component, Runtime.formatChangedPropKeys(subscriptionContainer));
// ^^ // ^^
Sie können sehen, dass es verwendet wird optionale Verkettung Operator im ausgegebenen Code. Verbraucher Ihrer Bibliothek müssen daher über eine entsprechende Konfiguration verfügen, um mit dieser Art von Code umgehen zu können. Ihr Beispielkonsument, die CRA-App, verwendet Babel; obwohl das Setup tut Habe die Transformation für optionale Verkettung, sie wird nur auf dem Quellcode für die React-App selbst ausgeführt, nicht seine Abhängigkeiten (einschließlich Ihrer Bibliothek).
Eine Möglichkeit, das Problem zu beheben, besteht darin, weniger modernen Code auszugeben, wodurch der Konfigurationsaufwand für Verbraucher verringert wird. Wenn Sie beispielsweise auf ES6 abzielen, verwenden Sie die folgenden Einstellungen in tsconfig.json:
Die React-App kann zumindest gestartet werden, ohne dass Sie Ihren Quellcode ändern müssen.
@customcommander müssen Sie wahrscheinlich auswerfen, um zur tsconfig in CRA zu gelangen. Verwenden Sie die offizielle TypeScript-Vorlage? Es sollte bereits auf ältere Laufzeitumgebungen für Browser abzielen.
@customcommander Ich bin mir dann nicht sicher, inwiefern das hier relevant ist; Die Konfiguration, die ich zeige, ist für die OPs tsconfig.json, kompilieren sie ihre Bibliothek von TypeScript zu JavaScript für die Verwendung in den Apps anderer Leute, einschließlich der Demo-CRA-App in ihrem Beitrag. Ich habe meine Antwort bearbeitet, um dies zu verdeutlichen.
– jonrsharpe
31. Okt. 2020 um 22:54
klingt perfekt! @jonrsharpe, könnten Sie mir bitte einen Rat geben, wie ich das Angular 11-Projekt so konfigurieren kann, dass dieses Problem umgeht (Paket pdfjs-dist), wenn ich eine Bibliothek nutze, die mir solche Probleme bereitet?
– Dmitri Gusarow
3. Mai 2021 um 22:25 Uhr
Piotr Maniak
Falls Sie nicht der Autor der Bibliothek sind oder diese nicht ändern möchten, wie die akzeptierte Antwort nahelegt, können Sie wie folgt vorgehen:
Ändern Sie die Browserliste, wie @adlerer vorschlägt:
(Stellen Sie sicher, dass Sie keine spezielle Konfiguration für haben development In browserslist)
NPM-Cache leeren:
npm cache clean --force
Installieren Sie Dinge neu, wie @Gel vorschlägt:
rm -rf node_modules && rm -f package-lock.json && npm i
Das hat mir nach stundenlangen Recherchen und Versuchen geholfen.
Wo würde man „Browserliste“ ändern?
– Caleb Jay
22. Juni 2022 um 7:41 Uhr
@CalebJay In package.json
– erli
23. Juni 2022 um 0:21
Was ist mit der Browserliste passiert? Warum müssen wir den Wert der Browserliste ändern?
– Kevin Mendez
30. Juni 2022 um 23:54
In meinem Fall – so wie ich es verstehe – das browserslist enthielt keine Legacy-Versionen für die Entwicklungsumgebung. Außerdem anscheinend browserslist enthält einige Konfigurationsdaten im globalen Cache. Wenn es Ihnen also nicht gelingt, den Cache zu leeren, führen Sie am Ende eine andere Konfiguration aus, als Sie denken. Erklärt das das?
– Piotr Maniak
4. Juli 2022 um 15:57 Uhr
Schön, hat bei mir funktioniert
– ehsan parsania
18. Januar um 13:50 Uhr
Obwohl es spät ist, kann es trotzdem jemandem helfen. In meinem Fall habe ich vergessen, das hinzuzufügen
"jsx": "react"
in meiner tsconfig.json.
In meinem Fall werden konservativere Kompilierungsziele festgelegt package.json hat geholfen, dieses Problem zu lösen:
Das Problem in diesem Fall ist, dass die Version 3.2.0 von React-Leaflet nicht für jedes Projekt funktioniert (ich weiß nicht wirklich warum). Ich arbeite mit Reagieren unter Verwendung von CRA. Beachten Sie dies, bevor Sie etwas unternehmen. Jetzt die Lösung …
React-Leaflet deinstallieren
Gehe zu package.json und fügen Sie diese Zeilen ein
In meinem Fall habe ich versucht, Abhängigkeiten von „react-leaflet“ in mein altes Projekt zu importieren, aber kurz nach dem Importieren der Abhängigkeiten stand ich vor dem gleichen Problem. Ich habe mein Problem durch diese Verfahren gelöst.
Ich weiß, dass das vielleicht irrelevant klingt, aber im nächsten Schritt habe ich diese fünf Abhängigkeiten in „package.json“ auf die neuesten Versionen aktualisiert:
1- „@testing-library/jest-dom“
2- „@testing-library/react“
3- „@testing-library/user-event“
4- „Reaktionsskripte“
5- „Webvitale“
Ich vermute, dass das Problem irgendwie mit den beiden letzten Abhängigkeiten zusammenhängt, aber ich habe für alle Fälle alle fünf aktualisiert.
dann im Terminal:
npm i
sudo npm update -g
14535800cookie-check„Möglicherweise benötigen Sie einen zusätzlichen Loader, um das Ergebnis dieser Loader zu verarbeiten.“yes