如何使用Scalajs 0.6和1.0.0交叉编译sbt顶级项目?

时间:2019-07-19 15:18:02

标签: scala sbt scala.js

我想交叉编译一个ScalaJS外观。该外观是sbt的顶级项目。但是当我编译时,ScalaJS 1.0.0-M8出现以下错误:

Option not understood: sjsDefinedByDefault

以下是最小复制品(https://github.com/fdietze/scala-js-d3v4/tree/sjsDefinedByDefault):

build.sbt

name := "scala-js-d3v4"
version := "master-SNAPSHOT"
scalaVersion := "2.12.8"

enablePlugins(ScalaJSPlugin)
scalacOptions += "-P:scalajs:sjsDefinedByDefault"

plugins.sbt

val scalaJSVersion = Option(System.getenv("SCALAJS_VERSION")).getOrElse("0.6.28")
addSbtPlugin("org.scala-js" % "sbt-scalajs" % scalaJSVersion)

使用0.6.28进行构建有效,而1.0.0-M8进行以下操作则失败:

Option not understood: sjsDefinedByDefault

Travis版本:https://travis-ci.org/fdietze/scala-js-d3v4/builds/560544812

scalajs-projects必须是子项目,才能将选项仅作为scalajs设置应用?那么为什么它可以与0.6.28一起使用?

以供参考:https://www.reddit.com/r/scala/comments/786gco/error_bad_option_pscalajssjsdefinedbydefault/

1 个答案:

答案 0 :(得分:1)

the release notes of Scala.js 1.0.0-M8末尾所述,您需要使用以下设置:

scalacOptions ++= {
  if (scalaJSVersion.startsWith("0.6.")) Seq("-P:scalajs:sjsDefinedByDefault")
  else Nil
}