Я пытаюсь разделить некоторый код scala между общей библиотекой и веб-проектом моей платформы воспроизведения с помощью ScalaJS.Play Framework frontend JS с использованием внешних зависимостей Scala.js
Я создал общий проект с использованием ScalaJS в отдельной сборке (в другой папке, другой build.sbt), включая модульные тесты с использованием uTest, и все работает как ожидалось. Я перекрестно скомпилировал библиотечный код для разделения целей (shared_jvm и shared_js) и использовал команду SBL publishLocal. В этот момент все в порядке.
Я создал отдельный проект в моем веб-приложение рамочным игра для моего конкретного кода ScalaJS веб-приложений в папке web_js, используя этот код:
lazy val web_js = (project in file("web_js")).settings(
scalaVersion := "2.11.1",
persistLauncher := true,
persistLauncher in Test := false,
unmanagedSourceDirectories in Compile := Seq((scalaSource in Compile).value),
libraryDependencies ++= Seq(
"org.scala-js" %%% "scalajs-dom" % "0.8.0",
"be.doeraene" %%% "scalajs-jquery" % "0.8.0",
"org.myorg" %%% "shared-js" % "0.1-SNAPSHOT"
)).
enablePlugins(ScalaJSPlugin, ScalaJSPlay)
Библиотека решен без каких-либо вопрос по SBT. Я могу скомпилировать и ошибок нет, и я могу ссылаться на общую библиотеку в моем коде.
Для того, чтобы использовать свой общий код JS, я расширяю JSApp и вызвать объект в моей общей библиотеке так:
//Index.scala
import org.myorg.shared.SharedObject
object Index extends JSApp {
def main(): Unit = {
SharedObject.printSomething()
}
}
Однако, когда это вызывается после того, как я загрузить мой браузер, я получаю неопределенная ошибка, связанная с объектом в моей общей библиотеке:
Uncaught TypeError: undefined is not a function
Как я могу загрузить зависимую ScalaJS библиотеку в страницу в моем Play Framework проекта?
Другие ноты:
Я не могу увидеть мой общий код библиотеки в «источники» вид отладчика хрома. Я могу видеть только фрагмент кода Index.scala, вставленный выше. Это заставляет меня полагать, что общая библиотека, на которую я ссылаюсь, фактически не загружается браузером, но я не уверен, что так оно работает или нет.
Кстати, я видел проект play-with-scalajs-example, и я использую его для загрузки точки входа Index.scala выше, используя этот фрагмент кода:
@playscalajs.html.scripts("/assets", projectName = "web_js")
Но я не имел никакого успеха, используя он загружает зависимую библиотеку.
Вы видите какие-либо предупреждения при запуске 'web_js/fastOptJS'? Тот факт, что вы не видите каких-либо источников, может быть просто проблемой относительного пути с исходными картами. – gzm0