Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Playframework 使用Scala.JS外部依赖项播放框架前端JS_Playframework_Scala.js - Fatal编程技术网

Playframework 使用Scala.JS外部依赖项播放框架前端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

我正在尝试使用ScalaJS在公共库和我的play framework web项目之间共享一些scala代码

我已经在一个单独的构建(不同的文件夹,不同的build.sbt)中使用ScalaJS创建了共享项目,包括使用uTest的单元测试,并且一切都按照预期工作。我交叉编译了库代码以分离目标(shared_jvm和shared_js),并使用了SBT的publishLocal命令。现在一切都很好

我在我的play framework web应用程序中为我的特定web应用程序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项目的页面中

其他说明:

我无法在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"
)