كيفية جعل مهمة ترجمة scalatra تعتمد على مهمة scala.js packageJS في sbt؟

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

  •  21-12-2019
  •  | 
  •  

سؤال

لدي مشروع scalatra وأريد من خلاله تقديم خدمة JavaScript التي تم إنشاؤها من مشروع scala.js.

لدي بناء sbt متعدد المشاريع يسمح لي ببناء هذين المشروعين بنجاح.وهذا هو، يمكنني استخدام مهام الترجمة (والتشغيل) في مشروع Scalatra؛ويمكنني استخدام مهمة packageJS في مشروع scala.js.

ومع ذلك، أود بشدة أن أتمكن من جعل مهمة ترجمة scalatra تعتمد على مهمة scala.js packageJS؛لذلك عندما يتم تجميع مشروع Scalatra، يتم إنشاء Javascript تلقائيًا في مشروع Scala.js.

لقد حاولت في ملف build.sbt متعدد المشاريع الخاص بي:

lazy val wwwjs = project // Scala.js project

lazy val www = project // Scalatra project
  .dependsOn(wwwjs % "compile->packageJS")

ولكن عند تجميع مشروع Scalatra، فشل هذا بسبب "لم يتم العثور على التكوين في wwwjs#wwwjs_2.10;0.1:"حزمة JS".لقد كان مطلوبًا من www#www_2.10;0.1 ترجمة".

أنا جديد إلى حد ما على sbt (وScalatra وScala.js!) - هل يمكن لأي شخص أن ينيرني حول كيفية القيام بذلك؟

شكرًا :)

هل كانت مفيدة؟

المحلول

ما تريده هنا ليس التبعية بين المشاريع (وهو ما dependsOn في المشروع لا) ولكن بين tasks.

لست على دراية بـ Scalatra، ولكن بالنسبة لجانب sbt، يجب أن يكون مشابهًا جدًا لـ Play، ولدينا نموذج ناجح لمشاريع Play مع Scala.js هنا:https://github.com/vmunier/play-with-scalajs-example/blob/master/project/Build.scala

على وجه الخصوص، أستمد التكيف الأساسي التالي من البناء الخاص بك أعلاه:

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

بدلا من ذلك، استخدم fullOptJS بدلاً من fastOptJS للحصول على الإصدار المُحسّن بالكامل (لكن ذلك يستغرق عدة ثوانٍ لإعادة البناء في كل مرة تقوم فيها بإجراء تغيير).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top