2015-02-16 13 views
13

Gibt es bereits einen bevorzugten Weg, ECMAScript6-Code mit Hilfe von Traceur oder Babel (früher 6to5) in einem Maven-Projekt nach ECMAScript5 zu transponieren? Ich habe das Netz schon ohne Erfolg durchsucht.Maven Plugin, das ES6 nach ES5 transpiliert, das Traceur oder Babel verwendet

+0

Ich denke, beides ist in Ordnung. Hattest du ein Problem mit beiden? –

+1

Ich habe gefragt, ob es schon eine Lösung gibt, wie man einen dieser Transpiler in einen Maven Build integriert. Ich habe versucht, Babel mit nodejs zu verwenden, aber ich möchte es verwenden, um ES6-Code in ES5 in meinem Maven-Projekt zu transponieren. –

+0

Ich verstehe. Hast du das "exec" maven-Plugin ausprobiert? http://mojo.codehaus.org/exec-maven-plugin/usage.html.Ich habe das schon mal benutzt, um einen Build-Prozess mit node.js –

Antwort

8

Dies ist möglicherweise nicht die genaue Lösung für Ihr Problem, aber die Art, wie ich dies tun, ist mit https://github.com/eirslett/frontend-maven-plugin, die wiederum ermöglicht Grunt Aufgaben während des Build-Prozesses (und in verschiedenen Phasen des Builds) verwenden. Dann, indem ich Grunt für mich verfügbar machte, erstellte ich eine Grunt-Aufgabe, um meine Dateien mit grunt-babel zu konvertieren.

Das Plugin erlaubt Ihnen auch, Schluck zu verwenden, wenn Sie dies bevorzugen.

Ich verwende auch das gleiche Setup, um Karma und JSHint während der Testphase auszuführen.

hoffe, das hilft,

M

Edit: seine erwähnenswert, dass der Knoten Installation, dass das Plugin tut, um das Projekt lokal ist. Es muss also kein Knoten global installiert sein.

1

Ich habe den oben genannten genialen Frontend-Maven-Plugin-Vorschlag verwendet und alles funktionierte, aber lief in ein paar Probleme, so dass ich dachte, ich würde eine umfassendere Lösung, die bereit ist blind zu kopieren und in Ihre Build-Dateien eingefügt werden. I wrote a detailed blog post about it here und eine leicht gekürzte Version davon ist unten:

Mein Frontend-Maven-Plugin Abschnitt in meinem pom.xml wie dies am Ende der Suche:

<plugin> 
<groupId>com.github.eirslett</groupId> 
<artifactId>frontend-maven-plugin</artifactId> 
<version>1.2</version> 

<configuration> 
    <nodeVersion>v4.6.0</nodeVersion> 
</configuration> 

<executions> 
    <execution> 
     <goals> 
      <goal>install-node-and-npm</goal> 
     </goals> 
     <phase>generate-resources</phase> 
    </execution> 

    <execution> 
     <id>npm install</id> 
     <goals> 
      <goal>npm</goal> 
     </goals> 
     <configuration> 
      <arguments>install</arguments> 
     </configuration> 
    </execution> 

    <execution> 
     <id>grunt build</id> 
     <goals> 
      <goal>grunt</goal> 
     </goals> 
     <phase>generate-sources</phase> 
    </execution> 
</executions> 

Nachdem sie die Grunt transpile Schritt alles funktionierte Ich lief auf das Problem, diese Dateien in der verpackten WAR-Datei richtig zu bekommen. Ich versuchte das offensichtliche Kopieren der Dateien in den explodierten Kriegszielordner bei verschiedenen Build-Phasen und verschiedene ähnliche Dinge, die alle nicht funktionierten.

Die Lösung bestand darin, nur die nicht transpilierten js-Dateien zu überschreiben, indem Sie die transpilierten Dateien in den Abschnitt webResources des maven-war-plugin-Abschnitts aufnehmen. Die am Ende aussehen wie diese:

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-war-plugin</artifactId> 
<version>2.2</version> 
<configuration> 
    <warName>Example-1.0-SNAPSHOT</warName> 
    <webResources> 
     <resource> 
      <directory>${project.build.directory}/dist</directory> 
     </resource> 
    </webResources> 
</configuration> 

ich auch in die Frage der korrupten Pakete stieß in dem globalen Cache von NPM und links, die von Maven kommenden heruntergeladen wurde, ist lächerlich und etwas habe ich noch nie war geschehen.

Wenn Sie während des Frontend-Maven-Plugin-Build-Schrittes etwas wie einen Zip-Fehler oder eine Exception bekommen, ist dies wahrscheinlich und Sie können es mit einem "npm cache clean" beheben und die Verzeichnisse "node" und "node_modules" löschen Ihr Projektverzeichnis und erneut versuchen (es dauerte 3 mal, bis es die Abhängigkeiten erfolgreich ergriffen!)

Und my blog post enthält, was die Dateien package.json und GruntFile.js aussahen.