首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Scala.js外部依赖关系发挥框架前端JS

使用Scala.js外部依赖关系发挥框架前端JS
EN

Stack Overflow用户
提问于 2015-03-20 00:29:22
回答 1查看 731关注 0票数 1

我试图使用ScalaJS在一个公共库和我的play框架web项目之间共享一些scala代码。

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

我在我的play框架web应用程序中为我的特定web应用程序ScalaJS代码创建了一个单独的项目,它位于一个web_js文件夹中,使用以下代码:

代码语言:javascript
复制
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,并在共享库中调用了一个对象,如下所示:

代码语言:javascript
复制
//Index.scala
import org.myorg.shared.SharedObject

object Index extends JSApp {
  def main(): Unit = {
    SharedObject.printSomething()
  }
}

但是,在加载浏览器之后调用它时,会得到一个与共享库中的对象相关的未定义错误:

代码语言:javascript
复制
Uncaught TypeError: undefined is not a function

如何将依赖的ScalaJS库加载到Play Framework项目的页面中?

其他说明:

我无法在chrome的“源代码”调试器视图中看到我的共享库代码。我只能看到上面粘贴的Index.scala代码片段。这让我相信,我所引用的共享库实际上并不是由浏览器加载的,但我不确定它的工作方式是否正确。

顺便说一句,我已经看到了玩金刚游戏-例子项目,我正在使用这个片段来加载上面的Index.scala入口点:

代码语言:javascript
复制
@playscalajs.html.scripts("/assets", projectName = "web_js")

但我还没有成功地使用它来加载依赖库。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-20 07:09:18

我想我只是误解了javascript错误和/或已经有一段时间没有更新生成的javascript了。

原来,我依赖的是外部javascript资源(moment.js),它没有被加载。当我通过将脚本标记插入页面手动加载它时:

代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment.min.js"></script>

它按预期工作,并调用我的共享库。这很奇怪,因为我不记得在生成的fastopt.js脚本中看到我的代码,但我一定是错过了它,或者之前在我的框中出现了一些配置问题。

我不知道为什么我的嵌入式moment.js脚本不能工作,因为它是我的一个依赖项中的资源的一部分,我已经将它包括在jsDependencies设置中,如下所示:

代码语言:javascript
复制
jsDependencies ++= Seq(
    "org.myorg" %%% "momentjs" % "0.1-SNAPSHOT" / "moment.js"
)

但我想如果我搞不清楚的话,这是一个新职位的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29157411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档