AngularJS 2.0 kompiliert nach ES6

8

Ich kann den AngularJS 2.0 5-Minuten-Quickstart in meinem IntelliJ IDEA 14.1.4 nach dieser Stackoverflow-Antwort erhalten in Bezug auf AngularJS 2.0 TypeScript Intellij Idee (oder Webstorm) - ES6-Import-Syntax .

Dies scheint jedoch auf die Kompilierung von TypeScript bis EcmaScript 5 zu zielen.

Ich wollte sehen, ob ich AngularJS 2.0 Typescript zu EcmaScript 6 kompilieren könnte.

Problem 1: Wenn ich den TypeScript -Compiler zum Ziel ES6 ...

ändere

Ich bekomme einen TypeScript Compiler Fehler:

%Vor%

Ich kann es umgehen, indem ich die Compileroption --module "amd" TypeScript lösche.

Das wirft die Frage auf: Ohne Angabe von amd, welches Modulformat verwendet ES6 ?

Problem 2:

Nach dem Ändern der TypeScript -Compileroptionen sehen sie wie folgt aus:

Ich bekomme Fehler bezüglich:

%Vor%

Hat jemand das schon mal gesehen? Ich vermute, dass es etwas damit zu tun hat, dass AngularJS 2.0 Quickstart ES-6 Promise spezifiziert und es global installiert wird, aber nicht in der Lage war, herauszufinden, wie es gelöst werden kann.

Vielen Dank im Voraus.

    
Philip Tenn 03.08.2015, 17:34
quelle

4 Antworten

5

Okay, ich habe die Probleme erkannt, die mich daran hinderten, den AngularJS 2.0 Quickstart in EcmaScript 6 zu kompilieren:

Lösung:

  1. Wie bereits erwähnt, unterstützt ES6 amd nicht. Ich habe versucht, --module="system" Compiler-Flag zu spezifizieren, aber das hat auch nicht funktioniert, immer noch die Fehlermeldung

    Fehler: TS1204: Module können nicht in 'commonjs', 'amd', 'system' oder 'umd' zusammengestellt werden, wenn 'ES6' oder höher ausgewählt wird.

Die Lösung dafür ist, NICHT irgendeine Art von Modul anzugeben.

Meine neuen TypeScript Compileroptionen:

%Vor%
  1. Der Befehl tsd install angular2 es6-promise rx rx-lite zieht ES6-Versprechen herunter, wie man es erwarten würde. Das Problem ist, dass TypeScript 1.5.3 eine TypeScript Definition file in der bin namens lib.es6.d.ts enthält.

Dies enthält eine Definition von "Versprechen", die mit derjenigen kollidiert, die über den Befehl " tsd " abgerufen wurde.

Ich habe das Verzeichnis es6-promise aus meinem Angular2-Projekt typings -Ordner entfernt (das Verzeichnis, das durch Ausführen von tsd erstellt wurde).

  1. (das fühlte sich an wie ein Hack): Ich ging in die Datei angular2.d.ts und entfernte die folgende Zeile:

    ///reference path=<"../es6-promise/es6-promise.d.ts"/>

Der Grund, warum ich das entfernen musste, ist AngularJS 2.0 TypeScript Type Definition sucht auf Peer-Ebene nach ES6-Versprechen. Da die TypeScript compiler (zumindest die Version, die ich verwende, TypeScript 1.5.3 enthält die ES6 Promise bereits) und sie in Konflikt geraten.

    
Philip Tenn 04.08.2015, 15:36
quelle
5
  

ohne Angabe von amd, welches Modulformat verwendet ES6?

Bei Ziel es6 soll nur system erlaubt sein. Die Tatsache, dass amd funktioniert hat, ist ein Fehler.

  

Doppelte Kennung "Versprechen"

Mit Ziel es6 lib.d.ts ändert sich in lib.es6.d.ts ( diese Datei ), die eine Definition für Promise enthält.

Empfohlene Lösung:

Mehr über lib.d.ts Ссылка

    
basarat 04.08.2015 03:31
quelle
5

Das Tutorial für Angular2 wurde seit der Antwort von Philip geändert, es verwendet nicht mehr es6-promise, aber ich erhalte immer noch diesen Fehler, wenn ich versuche, es6 zu transpilieren.

Der Trick besteht darin, die Browser-Typisierung bei der Verwendung von es6 auszuschließen. Sie können% c_de% zur Ausschlussoption in tsconfig.js hinzufügen.

Wenn Sie nach es6 transponieren, verwenden Sie:

%Vor%

Wenn Sie nach es5 transponieren, verwenden Sie:

%Vor%     
Eduardo 28.04.2016 07:09
quelle
1

Ich hatte lange damit zu kämpfen. Ich habe alle Informationen ohne Glück versucht. Ich habe auf Typisierungen in meiner Boot-Datei verwiesen.

/// <reference path="../../typings/index.d.ts" />

Wo Typisierung die folgende Struktur hat

typings -- globals ---- es6-collections ---- es6-promise ---- node

Ich hatte auch das @type Knotenmodul komplett entfernt. Außerdem versuchen Sie verschiedene 'Excludes' und 'Typen' in der tsconfig.json Datei. Ohne Erfolg.

Nach viel Herumspielen fand ich heraus, dass wenn ich nur 'node' index.d.ts und nicht den anderen Inhalt von 'typings' enthielt, es gut funktionierte.

Daher

/// <reference path="../../typings/globals/node/index.d.ts" />

in meiner Angular 2 Boot-Datei hat es für mich getan.

    
Shane 24.11.2016 00:28
quelle