Bei den letzten Webanwendungen, an denen wir gearbeitet haben, haben wir die Require.js-Bibliothek verwendet, um unseren Javascript-Code zu modularisieren. Dies ermöglicht es Entwicklern, große Mengen an Javascript-Code in kleinere Module aufzuteilen, wodurch der Code viel einfacher zu lesen und zu pflegen ist. Require.js bietet auch ein Optimierungsskript, das diese Module in eine (oder einige wenige) Dateien kompiliert und komprimiert, um sie effizient an den Endbenutzer zu liefern. Wenn Sie den Optimierer als Teil eines Maven-Builds ausführen, kann dieser Prozess leider mehrere Minuten dauern. In diesem Artikel erkläre ich Ihnen, wie Sie die Dinge etwas beschleunigen können.
Das Nashorn im Zimmer
Wir verwenden den Optimierer von Require.js als Teil unseres Paket- und Release-Zyklus für Anwendungen, der derzeit von Maven unterstützt wird. Um den Optimierer mit Maven auszuführen, verwenden wir das
Verwendung von node.js in Maven
Nachdem ich mich also lange genug über dieses Problem geärgert hatte, so dass es zu einem Lieblingsärgernis wurde, habe ich beschlossen, es endlich zu lösen. Für mich besteht die ultimative Lösung aus zwei Schritten:
- requirejs-maven-plugin sollte die Ausführung des Optimierers mit node.js unterstützen
- Die node.js-Binärdatei sollte der Build-Umgebung ohne einen externen Installationsprozess zugeführt werden.
Um Schritt 1 zu implementieren, habe ich zusammen mit dem Ersteller des requirejs-maven-plugin, Matthew Cheely, die Unterstützung von node.js hinzugefügt. In der neuesten Version ist es möglich, einen Pfad zu einer node.js-Binärdatei anzugeben, woraufhin das Plugin den Optimierer mit node.js ausführt.
Um die node.js-Binärdatei an die Build-Umgebung zu übergeben, habe ich ein neues Plugin namens nodejs-maven-plugin erstellt. Dieses Plugin extrahiert eine plattformspezifische nodejs-Binärdatei in ein Verzeichnis Ihrer Wahl. Derzeit werden die Plattformen Windows, Mac und Linux in allen 32- und 64-Bit-Versionen unterstützt.
Die Konfiguration dieser beiden Plugins sollte in etwa so aussehen:
<plugin>
<groupId>com.github.skwakman.nodejs-maven-plugin</groupId>
<artifactId>nodejs-maven-plugin</artifactId>
<version>1.0.2</version>
<executions>
<execution>
<goals>
<goal>extract</goal>
</goals>
</execution>
</executions>
<configuration>
<targetDirectory>
${project.build.directory}/nodejs/
</targetDirectory>
</configuration>
</plugin>
<plugin>
<groupId>com.github.mcheely</groupId>
<artifactId>requirejs-maven-plugin</artifactId>
<version>2.0.0</version>
<executions>
<execution>
<goals>
<goal>optimize</goal>
</goals>
<phase>prepare-package</phase>
<configuration>
<filterConfig>true</filterConfig>
<nodeExecutable>${project.build.directory}/nodejs/node</nodeExecutable>
</configuration>
</execution>
</executions>
</plugin>
Diese Konfiguration weist nodejs-maven-plugin an, eine node.js-Binärdatei in das Verzeichnis target/nodejs des Maven-Projekts zu extrahieren. Requirejs-maven-plugin führt dann das Optimierungsskript von Require.js unter Verwendung der neu extrahierten node.js-Binärdatei aus. Mit dieser Konfiguration können Sie node.js auf all Ihren Build-Umgebungen verwenden, ohne es manuell installieren zu müssen.
Verfasst von

Sannie Kwakman
Unsere Ideen
Weitere Blogs
Contact



