Установите кросс-скомпилированную библиотеку scala.js - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть небольшая библиотека Scala, которую я хочу использовать в приложении Scala.js: https://github.com/fbaierl/scala-tarjan

По этой причине я решил создать кросс-скомпилированную библиотеку, которая компилируется как в Scala.js, так и в Scala JVM: https://github.com/fbaierl/scalajs-cross-compile-tarjan. Но я немного застрял в том, как продолжать дальше.

Пока у меня есть весь соответствующий код внутри общего каталога:

  • общий / SRC / Главная / 1011 * Скала *

и два Tarjan.scala класса для JVM и JS здесь:

  • JS / SRC / главная / Скала /
  • JVM / SRC / главная / Скала /

Предполагается, что это публичные "интерфейсные классы" как для JVM, так и для JS, которые просто вызывают методы из общей библиотеки.

JS / SRC / главная / Скала / Tarjan.scala:

import com.github.fbaierl.tarjan.{TarjanRecursive => lib}
import scala.scalajs.js.annotation.{JSExport, JSExportTopLevel}

@JSExportTopLevel("Tarjan")
object Tarjan {
   @JSExport
   def tarjan[T](g: Map[T, List[T]]): Unit = lib.tarjan(g)
}

JVM / SRC / главная / Скала / Tarjan.scala:

import com.github.fbaierl.tarjan.{TarjanRecursive => lib}

object Tarjan {
  def tarjan[T](g: Map[T, List[T]]): Unit = lib.tarjan(g)
}

Это вообще правильный подход? Могу ли я скомпилировать проект и опубликовать его, например, на. Sonatype

1 Ответ

0 голосов
/ 02 ноября 2018

Вместо дублирования «классов интерфейса» для JS и JVM, вы можете использовать библиотеку scalajs-stubs, чтобы иметь возможность использовать @JSExportTopLevel и @JSExport в общем коде.

общий / SRC / главная / Скала / Tarjan.scala:

import com.github.fbaierl.tarjan.{TarjanRecursive => lib}
import scala.scalajs.js.annotation.{JSExport, JSExportTopLevel}

@JSExportTopLevel("Tarjan")
object Tarjan {
  @JSExport
  def tarjan[T](g: Map[T, List[T]]): Unit = lib.tarjan(g)
}

build.sbt:

… .jvmSettings(
  libraryDependencies += "org.scala-js" %% "scalajs-stubs" % scalaJSVersion % "provided"
)

См. «Экспорт общих классов в JavaScript» внизу https://www.scala -js.org / doc / project / cross-build.html .

...