gpt4 book ai didi

sbt - 在 SBT 中使用 scala.js 仅编译(而不是覆盖运行)

转载 作者:行者123 更新时间:2023-12-04 18:20:09 24 4
gpt4 key购买 nike

我正在尝试使用 scalajs 将一些 scala 源编译为 javascript,而不修改有关 sbt 环境的任何其他内容,我不希望它覆盖“运行”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"
)}

它可以很好地编译javascript和scala,但问题是这实际上破坏了现有的“运行”命令,我想使用与默认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,
"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",
)

这显然也解决了 run 的问题。命令。

关于sbt - 在 SBT 中使用 scala.js 仅编译(而不是覆盖运行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27505957/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com