Playframework 使用Scala.JS外部依赖项播放框架前端JS
我正在尝试使用ScalaJS在公共库和我的play framework web项目之间共享一些scala代码 我已经在一个单独的构建(不同的文件夹,不同的build.sbt)中使用ScalaJS创建了共享项目,包括使用uTest的单元测试,并且一切都按照预期工作。我交叉编译了库代码以分离目标(shared_jvm和shared_js),并使用了SBT的publishLocal命令。现在一切都很好 我在我的play framework web应用程序中为我的特定web应用程序ScalaJS代码在web_js文件夹中创建了一个单独的项目,使用以下代码:Playframework 使用Scala.JS外部依赖项播放框架前端JS,playframework,scala.js,Playframework,Scala.js,我正在尝试使用ScalaJS在公共库和我的play framework web项目之间共享一些scala代码 我已经在一个单独的构建(不同的文件夹,不同的build.sbt)中使用ScalaJS创建了共享项目,包括使用uTest的单元测试,并且一切都按照预期工作。我交叉编译了库代码以分离目标(shared_jvm和shared_js),并使用了SBT的publishLocal命令。现在一切都很好 我在我的play framework web应用程序中为我的特定web应用程序ScalaJS代码在w
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项目的页面中
其他说明:
我无法在chrome的“源代码”调试器视图中查看我的共享库代码。我只能看到上面粘贴的Index.scala代码片段。这让我相信我引用的共享库实际上并没有被浏览器加载,但我不确定它是否是这样工作的
顺便说一下,我已经看过这个项目,我正在使用它加载上面的Index.scala入口点,使用以下代码段:
@playscalajs.html.scripts("/assets", projectName = "web_js")
但是我没有成功地使用它加载依赖库。我想我只是误解了javascript错误和/或有一段时间没有更新生成的javascript 事实证明,我依赖的是一个没有加载的外部javascript资源(moment.js)。通过在页面中插入脚本标记手动加载时:
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment.min.js"></script>
但我想,如果我不明白的话,这是一个新帖子的问题。当你运行
web\u js/fastOptJS
时,你会看到任何警告吗?您没有看到任何源的事实可能只是源映射的一些相对路径问题。如果这对任何人都有帮助,我只需要在我的play framework JS项目SBT配置中添加:skip in packageJSDependencies:=false。然后,我可以使用:其中web_js是我的Scala js项目的名称来引用HTML文件中的依赖项脚本。
jsDependencies ++= Seq(
"org.myorg" %%% "momentjs" % "0.1-SNAPSHOT" / "moment.js"
)