ScalaJS-SBT跨项目配置,用于在JVM上测试部分“JS”-模块
下面的ScalaJS-SBT跨项目配置,用于在JVM上测试部分“JS”-模块,scala,sbt,scala.js,Scala,Sbt,Scala.js,下面的build.sbt适用于有3个模块的项目: 共享-模块 编译到JS平台和JVM平台 对JVM模块、对JS模块和自身可见 JVM-模块 编译到JVM平台 对JS-模块不可见,对Shared-模块也不可见,仅对自身可见 JS-模块 编译到JS平台 对JVM-模块不可见,对共享-模块也不可见,仅对自身可见 我想要第四个模块TestJSonJVM,它可以编译到JVM平台和JS平台,并且只对JS-模块和它本身可见 TestJSonJVM-模块的目的是将JS-模块的部分逻辑/代码提取到Te
build.sbt
适用于有3个模块的项目:
共享
-模块
- 编译到JS平台和JVM平台
- 对
模块、对JVM
模块和自身可见JS
JVM
-模块
- 编译到JVM平台
- 对
-模块不可见,对JS
-模块也不可见,仅对自身可见Shared
JS
-模块
- 编译到JS平台
- 对
-模块不可见,对JVM
-模块也不可见,仅对自身可见共享
TestJSonJVM
,它可以编译到JVM平台和JS平台,并且只对JS
-模块和它本身可见
TestJSonJVM
-模块的目的是将JS
-模块的部分逻辑/代码提取到TestJSonJVM
-模块中,这样就可以在JVM平台上测试提取的部分(相对于ScalaJS平台,JVM平台具有更好的工具(调试、IDE集成等)
我需要如何修改下面的build.sbt
文件?这样就有可能了
lazy val root = project
.in(file("."))
.aggregate(imJS, imJVM)
.settings(
scalaVersion := Settings.versions.scala,
publish := {},
publishLocal := {}
)
lazy val im = crossProject
.in(file("."))
.settings(
libraryDependencies ++= Settings.sharedDependencies.value,
addCompilerPlugin(
"org.scalamacros" % "paradise" % "2.1.0" cross CrossVersion.full),
scalaVersion := Settings.versions.scala,
name := "im",
version := "0.1-SNAPSHOT"
)
.jvmSettings(
libraryDependencies ++= Settings.jvmDependencies.value,
mainClass in Test := Some("app.server.rest.TestHttpServerApp"),
mainClass in Compile := Some("app.server.rest.TestHttpServerApp")
)
.jsSettings(
mainClass in Compile := Some("app.client.Main"),
libraryDependencies ++= Settings.scalajsDependencies.value,
persistLauncher in Compile := true,
persistLauncher in Test := false,
jsDependencies += RuntimeDOM,
scalaJSOptimizerOptions ~= { _.withDisableOptimizer(true) }
)
lazy val imJVM = im.jvm
lazy val imJS = im.js
persistLauncher in Compile := true
persistLauncher in Test := false
cancelable in Global := true
你说你有3个模块,但我只看到2个:
imJVM
和imJS
<代码>共享不是一个模块;它只是一个包含源文件的目录。事实上,您可能已经错误地认为JVM模块对共享模块不可见。是的,你的JS模块也是。嗯。。。谢谢,但是从imJVM
看不到imJS
,维卡也看不到,对吗?如果imJS
中的shared
和X
在imJS
的Z
和Y
中的imJVM
使用X
,那么imJVM
中的Y
使用imJS中的Z
?所以imJVM
依赖于imJS
?我可能不清楚。没有共享的模块。只有imJVM
和imJS
。为了构建imJVM
,我们将shared/
和jvm/
中的所有源代码一起编译。因此,在imJVM
的上下文中,jvm/
和shared/
中的源可以看到彼此。类似地,在imJS
的上下文中,js/
和shared/
中的源代码可以相互看到,并一起编译以形成imJS
模块。Hmmm。。。有趣!但是,当编译js/
时会发生什么情况,shared/
中的源代码想要的东西只存在于jvm/
中?显然,编译错误。