我正在尝试使用
scalajs将一些
scala源代码编译为
javascript而不修改有关sbt环境的任何其他内容,我不希望它覆盖“run”sbt命令的默认行为.
import ScalaJSKeys._ scalaJSSettings name := "foo" organization := "com.example" scalaVersion := "2.11.4" compile <<= (compile in Compile) dependsOn (fastOptJS in Compile) crosstarget in (fastOptJS in Compile) := ((classDirectory in Compile).value / "public" / "js") libraryDependencies ++= { val sprayVersion = "1.3.2" val akkaVersion = "2.3.7" Seq( "io.spray" %% "spray-can" % sprayVersion,"io.spray" %% "spray-routing" % sprayVersion,"io.spray" %% "spray-servlet" % sprayVersion,"io.spray" %% "spray-testkit" % sprayVersion % "test","com.typesafe.akka" %% "akka-actor" % akkaVersion,"com.typesafe.akka" %% "akka-testkit" % akkaVersion % "test","org.specs2" %% "specs2-core" % "2.3.11" % "test","javax.servlet" % "javax.servlet-api" % "3.1.0" % "provided","org.scala-lang.modules.scalajs" %%% "scalajs-jquery" % "0.6" )}
哪个编译javascript和scala就好了,但问题是这实际上打破了现有的“run”命令,我希望使用与默认sbt相同的发现来运行普通的旧scala.我的项目很简单,所以我不想沿着多项目路线走下去(就像play-with-scalajs-example).我想我可能需要删除scalaJSSettings,但后来我不知道如何访问fastOptJS目标,所以我可以将它作为依赖项附加到编译后执行此操作.
解决方法
你不能这样做.只要将scalaJSSettings放在项目中,所有源代码都将使用Scala.js编译器插件进行编译.
这确实会生成.class文件,但是,它们包含基本Scala编译器不会发出的内容,因此可能导致二进制不兼容问题或意外行为(请参阅this post).
相反,使用多项目构建:
import ScalaJSKeys._ organization := "com.example" scalaVersion := "2.11.4" val sprayVersion = "1.3.2" val akkaVersion = "2.3.7" lazy val foo = project. settings( name := "foo",compile <<= (compile in Compile) dependsOn (fastOptJS in Compile in bar),crosstarget in (fastOptJS in Compile in bar) := ((classDirectory in Compile).value / "public" / "js"),libraryDependencies ++= Seq( "io.spray" %% "spray-can" % sprayVersion,"javax.servlet" % "javax.servlet-api" % "3.1.0" % "provided" ) ) lazy val bar = project. settings(scalaJSSettings: _*). settings( name := "bar",libraryDependencies += "org.scala-lang.modules.scalajs" %%% "scalajs-jquery" % "0.6",)
这显然也解决了run命令的问题.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。