Wie kann die Scalatra-Kompilierungsaufgabe von der PackageJS-Aufgabe scala.js in sbt abhängig gemacht werden?
Frage
Ich habe ein Scalatra-Projekt, in dem ich JavaScript bereitstellen möchte, das aus einem scala.js-Projekt generiert wurde.
Ich habe einen SBT-Build mit mehreren Projekten, der es mir ermöglicht, beide Projekte erfolgreich zu erstellen.Das heißt, ich kann die Kompilierungs- (und Ausführungs-)Aufgaben im Scalatra-Projekt verwenden;und ich kann die packageJS-Aufgabe im scala.js-Projekt verwenden.
Allerdings würde ich mir sehr wünschen, dass die scalatra-Kompilierungsaufgabe von der scala.js-PackageJS-Aufgabe abhängt;Wenn also das Scalatra-Projekt kompiliert wird, wird das Javascript automatisch im Scala.js-Projekt generiert.
In meiner Multiprojekt-Datei build.sbt habe ich Folgendes versucht:
lazy val wwwjs = project // Scala.js project
lazy val www = project // Scalatra project
.dependsOn(wwwjs % "compile->packageJS")
Beim Kompilieren des Scalatra-Projekts schlägt dies jedoch mit der Meldung „Konfiguration nicht gefunden in wwwjs#wwwjs_2.10;0.1:“ fehl.'PaketJS'.Es wurde für die Kompilierung von www#www_2.10;0.1 benötigt.
Ich bin ziemlich neu bei sbt (und Scalatra und Scala.js!) – kann mir jemand erklären, wie das geht?
Danke :)
Lösung
Was Sie hier wollen, ist keine Abhängigkeit zwischen Projekte (welches ist was dependsOn
bei einem Projekt tut es), aber dazwischen tasks
.
Ich kenne Scalatra nicht, aber für die SBT-Seite sollte es Play sehr ähnlich sein, und wir haben hier eine erfolgreiche Vorlage für Play-Projekte mit Scala.js:https://github.com/vmunier/play-with-scalajs-example/blob/master/project/Build.scala
Insbesondere leite ich die folgende grundlegende Anpassung aus Ihrem obigen Build ab:
import scala.scalajs.sbtplugin.ScalaJSPlugin._ // if Build.scala
import ScalaJSKeys._
lazy val wwwjs = project // Scala.js project
lazy val www = project // Scalatra project
.settings(
compile in Compile <<= (compile in Compile) dependsOn (fastOptJS in (wwwjs, Compile))
)
Alternativ verwenden Sie fullOptJS
anstatt fastOptJS
für die vollständig optimierte Version (aber der Neuaufbau dauert jedes Mal, wenn Sie eine Änderung vornehmen, mehrere Sekunden).