SBT - 根据任务观看不同的来源

SBT - watch different sources depending on Task

在跨 Scala JS 服务器/客户端项目中,我希望更改某些源以重启服务器和其他源以触发打包过程,但不重启。不同的任务无济于事,因为它们只会做一个或另一个,而我同时想要两者。

更详细: 我有一个 Scala.js crossProject。我正在使用以下内容来确保服务器可以为内置的 JavScript 提供服务:

val app = crossProject.settings(...)
lazy val appJS = app.js
lazy val jsFile = fastOptJS in(appJS, Compile)
lazy val appJVM = app.jvm.settings(
  (resources in Compile) += jsFile.value.data,
  (resources in Compile) += jsFile.value.data.toPath.resolveSibling(jsFile.value.data.name+".map").toFile,
  (resources in Compile) += (packageJSDependencies in(appJS, Compile)).value
)

如果我 运行 ~ appJVM/compile:packageBin::packageConfiguration 然后对 JavaScript 源代码的更改会立即编译并放置在 appJVM target/classes 目录中,因此刷新浏览器会得到我的新代码 - 很棒。

但是,如果我编辑服务器端代码,我也想使用 sbt-revolver 插件来重新启动服务器。但是有一个问题 - 如果我使用 ~ ;appJVM/compile:packageBin::packageConfiguration;appJVM/reStart 然后更改客户端源重新启动服务器,这是我不想要的。但是,如果我从传递监视中删除客户端项目,那么它不再注意到我是否更改了客户端项目。

有没有办法为每个任务定义不同的 watchTransitiveSources?

您确定您使用的是 sbt-resolver 而不是 sbt-revolver 吗?

因为第二个允许使用

控制triggered资源
  • watchSources - 定义单个项目的文件 监测变化。默认情况下,项目监视资源和 Scala 和 Java 来源。
  • watchTransitiveSources - 然后结合 watchSources 当前项目和所有执行和类路径 依赖项(有关 interProject 的详细信息,请参阅 .scala build definition 依赖项)。

来源:http://www.scala-sbt.org/0.13/docs/Triggered-Execution.html

~ 实际上是一个命令,它监视基础项目的传递源,然后在重新 运行 原始输入(包括~)。它没有提供任何关于这些命令行输入可用的更改信息(很难看出它是如何做到的)。

因此,我得出的解决方案是编写一个新的监视命令。它还需要监视所有源,然后根据已更改的文件有条件地选择要执行的操作。

我已经破解了一些丑陋的东西,但我会考虑让它更清晰、通用、经过测试和一个插件。然而,与此同时,任何试图追随我的道路的人都可以使用这个 public 要点:https://gist.github.com/LeisureMonitoringAdmin/0eb2e775e47b40f07d9e6d58d17b6d52