Wie kann die Scalatra-Kompilierungsaufgabe von der PackageJS-Aufgabe scala.js in sbt abhängig gemacht werden?

StackOverflow https://stackoverflow.com//questions/23023026

  •  21-12-2019
  •  | 
  •  

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 :)

War es hilfreich?

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).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top