2017-07-14 57 views
0

观察不同的源代码在交叉的Scala JS服务器/客户端项目中,我想要更改某些源以重新启动服务器和其他源以触发打包过程,但不重新启动。不同的任务将无济于事,因为他们只会做一个或另一个,我同时需要两个任务。SBT - 根据任务

详细信息: 我有一个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?

+0

更一般地说 - 我完全不想使用'''''',而是创建一个任务,任意一组文件,并在每次更改时运行一些其他任务,但是我的谷歌搜索会让我失望 - 我无法找到某个人做这件事的例子。 –

+0

我认为你的问题可以写得更简单。另外,不要暗示答案,但描述你的需要。如果我理解正确,则需要更改某些源以重新启动服务器和其他源以触发打包过程,但无需重新启动。不同的任务不会有帮助,因为他们只会做一个或另一个,并且你想在同一时间。那是对的吗? – Atais

+0

是的,这是正确的。我会将我的开篇段落改为你的措词。 –

回答

0

~实际上是钟表基地项目的传递源的命令,然后同步运行一切作为参数传递给它当这些变化,然后再重新运行原始输入(包括〜)。它没有提供任何有关这些命令行输入可用更改的信息(很难看出它如何)。

因此,我来​​的解决方案是编写一个新的手表命令。它还需要观察所有来源,然后根据哪些文件发生变化,有条件地选择要执行的操作。

我已经把一些丑陋的东西一起做了,但是会看起来更清晰,一般,测试和插件。然而,与此同时,任何试图遵循我的道路的人都可以使用这个公开的要点:https://gist.github.com/LeisureMonitoringAdmin/0eb2e775e47b40f07d9e6d58d17b6d52

0

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

因为第二个允许使用

  • watchSources控制triggered资源 - 定义文件的单个项目,该项目是 监控更改。默认情况下,一个项目监视资源和Scala和Java源代码。
  • watchTransitiveSources - 再结合 watchSources当前项目和所有执行和CLASSPATH 依赖(见.scala build definition关于INTERPROJECT 依赖性的详细信息)。

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

+0

是的,sbt-revolver - typo。 我已阅读文档。它们不包括我的问题 - 根据同一个项目的任务观看一系列不同的来源。 –