Ich habe ein ApolloServer-Projekt, das mir Probleme bereitet. Daher dachte ich, ich könnte es aktualisieren und stieß bei der Verwendung des neuesten Babel auf Probleme. Meine "index.js" ist:
require('dotenv').config()
import {startServer} from './server'
startServer()
Und wenn ich es ausführe, erhalte ich den Fehler "SyntaxError: Importanweisung kann nicht außerhalb eines Moduls verwendet werden". Zuerst habe ich versucht, TPTB * davon zu überzeugen, dass dies ein Modul ist (ohne Erfolg). Also habe ich den "Import" in "Require" geändert und das hat funktioniert.
Aber jetzt habe ich ungefähr zwei Dutzend "Importe" in andere Dateien, die mir den gleichen Fehler geben.
* Ich bin sicher, die Wurzel meines Problems ist, dass ich nicht einmal sicher bin, was sich über das Problem beschwert. Ich nahm an, dass es Babel 7 war (da ich von Babel 6 komme und die Voreinstellungen ändern musste), bin mir aber nicht 100% sicher.
Das meiste, was ich für Lösungen gefunden habe, scheint nicht auf Straight Node zuzutreffen. Wie dieser hier:
ES6-Modul Import mit "Ungefangener SyntaxError: Unerwarteter Bezeichner"
Sagt, es wurde durch Hinzufügen von "type = module" behoben, aber dies würde normalerweise in den HTML-Code gehen, von dem ich keinen habe. Ich habe auch versucht, die alten Voreinstellungen meines Projekts zu verwenden:
"presets": ["es2015", "stage-2"],
"plugins": []
Aber das bringt mir einen weiteren Fehler: "Fehler: Plugin / Preset-Dateien dürfen keine Objekte exportieren, sondern nur Funktionen."
UPDATE: Hier sind die Abhängigkeiten, mit denen ich begonnen habe:
"dependencies": {
"@babel/polyfill": "^7.6.0",
"apollo-link-error": "^1.1.12",
"apollo-link-http": "^1.5.16",
"apollo-server": "^2.9.6",
"babel-preset-es2015": "^6.24.1",
quelle
jest.config.js
auf'ts-jest/presets/js-with-ts'
- noch einige andere Probleme, aber dies löste das große Problem. ..... äh ja, mein Problem war das Testen im Zusammenhang ... die normalen Builds waren in OrdnungAntworten:
Update 2020 (Knoten 13.2.0+)
Stellen Sie sicher, dass Sie die neueste Version von Node installiert haben. Die
--experimental-modules
Flagge ist nicht mehr erforderlich. Führen Sie einfach einen der folgenden Schritte aus :"type": "module"
zum nächstgelegenen Elternpackage.json
. Damit werden alle.js
und.mjs
Dateien als ES-Module interpretiert. Sie können einzelne Dateien mithilfe der.cjs
Erweiterung als CommonJS interpretieren .ODER
.mjs
Erweiterung. Alle anderen Dateien, z. B..js
werden als CommonJS interpretiert. Dies ist die Standardeinstellung, wenn sietype
nicht in definiert istpackage.json
.quelle
Laut dem offiziellen Dokument ( https://nodejs.org/api/esm.html#esm_code_import_code_statements ):
Damit Node Ihre Datei als ES-Modul behandelt, müssen Sie Folgendes tun ( https://nodejs.org/api/esm.html#esm_enabling ):
quelle
Ich hatte das gleiche Problem und das Folgende hat es behoben (unter Verwendung von Knoten 12.13.1):
Weitere Informationen: https://nodejs.org/api/esm.html
quelle
Ich hatte dieses Problem in einem jungen Express-API-Projekt.
Der fehlerhafte Servercode in
src/server/server.js
:Hier waren meine Abhängigkeiten:
Und hier war der Läufer, der den Fehler geworfen hat:
Das war frustrierend, da ich ein ähnliches Express-Projekt hatte, das gut funktionierte.
Die Lösung bestand zunächst darin, diese Abhängigkeit hinzuzufügen:
Und dann, um es mit einem
babel.config.js
im Projektstamm zu verdrahten :Ich weiß nicht genau, warum das funktioniert, aber ich habe es aus einer maßgeblichen Quelle kopiert , deshalb bleibe ich gerne dabei.
quelle
:-)
quelle
Meine Lösung bestand darin, den Pfad für den Babel-Knoten beim Ausführen von nodemon wie folgt einzuschließen:
Sie können in Ihrem package.json-Skript Folgendes hinzufügen:
HINWEIS: Meine Eingabedatei lautet index.js. Ersetzen Sie sie durch Ihre Eingabedatei (viele haben app.js / server.js).
quelle