在SBT中使用scala.js仅编译(而不是重写运行)

在SBT中使用scala.js仅编译(而不是重写运行),sbt,scala.js,Sbt,Scala.js,我试图使用scalajs将一些scala源代码编译成javascript,而不修改关于sbt环境的任何其他内容,我不希望它覆盖“run”sbt命令的默认行为 目前我有一个build.sbt,看起来像: import ScalaJSKeys._ scalaJSSettings name := "foo" organization := "com.example" scalaVersion := "2.11.4" compile <<= (compile in Compile)

我试图使用scalajs将一些scala源代码编译成javascript,而不修改关于sbt环境的任何其他内容,我不希望它覆盖“run”sbt命令的默认行为

目前我有一个build.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"
)}
导入ScalaJSKeys_
缩放设置
名称:=“foo”
组织:=“com.example”
规模规避:=“2.11.4”

编译你必须不要这样做。一旦将
scalaJSSettings
放入项目中,所有源代码都将使用Scala.js编译器插件进行编译

这确实会生成.class文件,但是,它们包含基本Scala编译器不会发出的内容,因此可能导致二进制不兼容问题或意外行为(请参阅)

相反,请使用多项目生成:

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,
      "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"
    )
  )


lazy val bar = project.
  settings(scalaJSSettings: _*).
  settings(
    name := "bar",
    libraryDependencies += "org.scala-lang.modules.scalajs" %%% "scalajs-jquery" % "0.6",
  )
导入ScalaJSKeys_
组织:=“com.example”
规模规避:=“2.11.4”
val version=“1.3.2”
val akkaVersion=“2.3.7”
lazy val foo=项目。
背景(
名称:=“foo”,

compile Dang希望情况并非如此。似乎应该有一种方法可以将src/main/scalajs和一个sbt插件编译为javascript,但既然没有,我将处理多个项目。