加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 18:02:22 所属栏目:安全 来源:网络整理
导读:我正在尝试使用 scalajs将一些 scala源代码编译为 javascript而不修改有关sbt环境的任何其他内容,我不希望它覆盖“run”sbt命令的默认行为. 目前我有一个build.sbt,看起来像: import ScalaJSKeys._scalaJSSettingsname := "foo"organization := "com.exampl
我正在尝试使用 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"
)}

哪个编译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命令的问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读