SyntaxError: 'Importieren' und 'Exportieren' kann nur mit 'Quellentyp: Modul' in Gulp + Babel + TypeScript + Quellkarten angezeigt werden

8

Ich versuche, von .ts zu .min.js wie folgt zu kompilieren:

%Vor%

Vorher habe ich nur folgendes gemacht und alles hat gut funktioniert:

%Vor%

Ich möchte Quellkarten verwenden können. Mein tsconfig.json ist folgender:

%Vor%

Seit ich "target": "es6" hinzugefügt habe, bekomme ich den Fehler:

%Vor%

Die Dokumentation zu zysify sagt:

  

Dieser Fehler tritt auf, wenn eine TypeScript-Datei nicht in JavaScript kompiliert wird, bevor sie über den Browserify-Bundler ausgeführt wird. Es gibt ein paar bekannte Gründe, auf die Sie stoßen könnten.

Aber in meinen Gulp-Aufgaben im Laufen tsify vor babelify:

%Vor%

Ich habe gerade die ES6-Kompilierung hinzugefügt, bevor ich TS in ES5 kompiliert habe und alles hat funktioniert (einschließlich Quellkarten).

Ich weiß nicht, was falsch ist. Hast du eine Idee? Vielen Dank im Voraus!

    
Remo H. Jansen 15.11.2015, 11:17
quelle

3 Antworten

2

Es scheint, dass es ein Problem mit browserify und seiner Auflösung von symbolisierten Transformationen gab. Allerdings dieses Commit , das die > fs.realpathSync Methode, die den kanonischen absoluten Pfadnamen zurückgibt, sollte das Problem behoben sein. Und es wurde definitiv in der 10.2.5 version von node-browserify gelandet.

Wie erwähnt von James, wenn Sie nicht auf eine neuere Version aktualisieren können, können Sie seine Antwort mit% auschecken co_de%, das das gleiche Problem behebt .

Wie Schluck und Bräuarbeit zusammen arbeiten, ist ziemlich interessant, da es eines der wenigen Werkzeuge ist, um tatsächlich kein zugehöriges Schluckplugin zu benötigen (was sogar auf die schwarze Liste gesetzt , um Benutzer zu zwingen, das browserify-Paket direkt zu verwenden. Der Grund, warum es nicht benötigt wird, ist aufgrund der Tatsache, dass @substack , insbesondere bekannt als der Schöpfer von browserify und Tape, ziemlich kenntnisreich ist ( und ich nehme an, mag) die Verwendung von Knoten-Streams, die er in diesen beiden Projekten verwendet. Angesichts dieser Prämisse und der Tatsache, dass 99% der gulp-Plugins nur das Tool verwenden, das sie mit Streams verwenden möchten, ist ein gulp-Plugin unnötig, da browserify bereits Streams verwendet, die Sie in Ihrer Aufgabe zurückgeben können.

Kleine Randnotiz, er hat auch ein Handbuch über Streams in Node geschrieben, das es wert ist, es auszuprobieren, wenn Sie wollen um mehr darüber zu verstehen, wie Schluck intern funktioniert.

Bezüglich realpathify funktioniert es genau wie jedes andere Plugin, kompiliert Typoskript-Dateien und übergibt die Ausgabe an den Stream, damit der browserify-Prozess fortgesetzt wird.

    
Aperçu 30.05.2017 01:00
quelle
1

Der Grund, warum Sie den Fehler erhalten, ist in Aperçus Antwort beschrieben. Ein Update sollte das Problem beheben, wie erwähnt, aber Sie können James 'Antwort sehen, wenn Sie nicht in der Lage sind.

Gulp, Babelify und TSSify arbeiten zusammen, um Ihren Code vom TypeScript ES2015 auf ein browserkompatibles reines ES5 mit Modulen zu übertragen. Hier ist eine grundlegende Einführung zu dem, was sie sind:

  • Schluck - Ein Task-Runner, der Streams verwendet, damit Sie bestimmte kleinere Aufgaben gleichzeitig gruppieren und ausführen können, um die Builds effizienter und einfacher zu gestalten

  • Babelify - Ein Browserify-Transformer, der Ihre Dateien vor der Bündelung in pures JavaScript umwandelt und je nach Voreinstellungen und Plug-Ins mit dem Browser kompatibel ist. Babel für Browserify

  • TSify - Ein Browserify-Plug-in, das Ihr TypeScript in JavaScript für den Browser kompiliert

Mit Gulp können Sie beide Browserify-Plugins einrichten, um Ihre TypeScript-Dateien in einer einfachen Aufgabe in ECMAScript 2015-Dateien zu konvertieren. Anstatt gulp-browserify zu verwenden, das auf der schwarzen Liste steht, können Sie einfach das Paket browserify verwenden, da es bereits Streams verwendet, was Gulp erwartet, so dass kein zusätzliches Gulp-Plugin benötigt wird.

Nun wie sie zusammenarbeiten. Stellen Sie sich Gulp als eine Fabrik vor, die Apfelkuchen herstellt, und Ihre Gulp-Aufgaben als bestimmte Aufgaben, die Ihre Fabrik ausführt, um das Endprodukt zu kreieren: den Teig zu machen, die Füllung zu kreieren, den Kuchen zu backen usw. Füllen, ich muss beginnen mit:

  • Äpfel pflücken und importieren
  • Verwandeln Sie die Äpfel mit Zitronensaft für Geschmack
  • Erhitzen und dann alle Zutaten hinzufügen
  • Lass es köcheln und abkühlen, bis es für die nächste Phase bereit ist

Diese sind wie die bestimmten Teile der Aufgabe in Ihrer Gulp-Aufgabe. Wenn ich browserfähige JavaScript von TypeScript erstellen wollte, würde ich ähnlich:

  • Wählen Sie meine zu übertragenden Zieldateien aus
  • Transformiere meine Zieldateien mit einem Plugin (TSify) und kompiliere sie (in diesem Fall) ES2015
  • Verwandeln Sie meine Zieldateien mit einem Transformer (Babelify), um sie vom TSify ES2015 auf ES5 für den Browser zu übertragen

Wenn wir dies auf den tatsächlichen Code anwenden, erhalten wir Folgendes:

  1. Erstellen Sie eine neue Gulp-Aufgabe, um unseren Code von TypeScript ES2015 in reines ES5 zu übertragen.
  2. Verwenden Sie browserify instance und streams, um die Eintragsdateien auszuwählen, in denen der Code transpiliert wird, und leiten Sie sie dann im Stream
  3. weiter
  4. Fahren Sie mit den Dateien im Stream fort, indem Sie ein Plug-in, tsify , registrieren, das Ihre TypeScript-Dateien im Stream in ES2015 ausführt und konvertiert (falls target ES2015 ist) und dann den Stream weiterleiten
  5. Verteilen Sie die neuen ES2015-Dateien im Stream an babelify , wodurch das ES2015 in ein browserfreundliches ES5 mit einer bestimmten voreingestellten es2015 umgewandelt wird. Geben Sie sie dann im Stream weiter, damit die Pipeline fortgesetzt werden kann

Alle Teile arbeiten zusammen, damit Sie eine Aufgabe haben, die mehrere Dinge erledigt und Ihr TypeScript schließlich in ES5 konvertiert.

    
Li357 31.05.2017 04:44
quelle
0

Ich hatte das gleiche Problem, das durch das Vorhandensein von symbolischen Links in meinem node_modules verursacht wurde. Ich habe es behoben, indem ich das realpathify Plugin hinzugefügt habe, um es zu browserifizieren.

%Vor%     
James McLaughlin 29.05.2017 22:12
quelle