【问题标题】:SBT - watch different sources depending on TaskSBT - 根据任务观看不同的来源
【发布时间】:2017-12-19 18:33:45
【问题描述】:

在跨 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 目标/类目录中,因此刷新浏览器会得到我的新代码 - 很棒。

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

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

【问题讨论】:

  • 更一般地说-我很想根本不使用~,而是创建一个监视任意文件集并在每次更改时运行其他任务的任务,但我的谷歌搜索让我失望 - 我找不到有人这样做的例子。
  • 我认为您的问题可以写得更简单。另外,不要暗示答案,而是描述您的需求。如果我理解正确,您希望更改某些源以重新启动服务器和其他源以触发打包过程,但无需重新启动。不同的任务将无济于事,因为他们只会做一个或另一个,而您同时想要两者。对吗?
  • 是的,没错。我将根据您的措辞更改我的开头段落。

标签: sbt scala.js


【解决方案1】:

~ 实际上是一个命令,它监视基础项目的传递源,然后在重新运行原始输入(包括 ~)之前同步运行作为参数传递给它的所有内容。它不会为这些命令行输入提供有关已更改内容的任何信息(很难看出它是如何做到的)。

因此,我想到的解决方案是编写一个新的 watch 命令。它还需要监视所有源,然后根据更改的文件有条件地选择要做什么。

我已经破解了一些丑陋的东西,因为它可以做到这一点,但会着眼于使它更易读、更通用、经过测试和插件。然而,与此同时,任何试图追随我的人都可以使用这个公共要点:https://gist.github.com/LeisureMonitoringAdmin/0eb2e775e47b40f07d9e6d58d17b6d52

【讨论】:

    【解决方案2】:

    您确定您使用的是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

    【讨论】:

    • 是的,sbt-revolver - 错字。我已经阅读了文档。他们没有解决我的问题 - 根据同一项目的任务查看一组不同的资源。
    猜你喜欢
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2017-08-12
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    相关资源
    最近更新 更多