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/
    中?显然,编译错误。