我正在使用Play 2.2.3。 我是Play和SBT的新手。我想让Play在开发过程中不看文件夹。在这种情况下,公共文件夹下的node_modules文件夹。 我在下面试过这些,但似乎没有用。另外,我不知道watchSources和playMonitoredFiles有什么区别。
.settings(
playMonitoredFiles <<= playMonitoredFiles map { (files: Seq[String]) =>
files.filterNot(file => file.contains("node_modules"))
}
)
.settings(
watchSources <<= watchSources map { (sources: Seq[java.io.File]) =>
sources
.filterNot(source => source.isFile && source.getPath.contains("node_modules") )
.filterNot(source => source.isDirectory && source.getPath.contains("node_modules"))
}
)
.settings(
watchSources := watchSources.value.filter { !_.getPath.contains("node_modules") }
)
答案 0 :(得分:0)
注意:最初的问题是关于旧版本 (2.2.3),但我发现同样的问题对于现代版本很有用。
所以基本上 watchSources 是用于 triggered-execution 功能的 SBT 密钥。
相反,playMonitoredFiles 是由 PlayFramework sbt-plugin 定义的 TaskKey,它控制一组目录以供观看 用于自动重新加载功能的开发服务器 (sbt run)。
启动 sbt 运行时,对于每个请求,都会检查 playMonitoredFiles 定义的目录,如果发现任何更改, 触发静默重新编译。这意味着关闭服务器,重新编译并重新启动。
playMonitoredFiles 的默认值在 playMonitoredFilesTask 中计算。
例如,我们将某个版本文件添加到我们的资源中,在每次编译时计算。我们需要 PlayFramework 来避免检查此文件的更改 在开发中,因为在每次请求时,自动重新编译都会重新生成此文件并播放标记要再次重新编译的源,但是没有重新编译java文件并且 没有打印出任何内容,因此我们必须调试应用程序才能找到问题。 此设置仅适用于开发服务器(sbt run)。
在 build.sbt 中的项目设置中,可以覆盖任务以排除目录(在示例中为 target/version 目录):
.settings(
...,
playMonitoredFiles := playMonitoredFiles.value.filterNot {
_.getPath() endsWith String.format("target%sversion", File.separator)
}
...,
)
该值属于 File 类型并且仅包含目录。