Play框架:如何在Play框架中不监视文件夹的更改

4

我正在使用Play 2.2.3。我是Play和SBT的新手。我想在开发过程中让Play不监视一个文件夹,即public文件夹下的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")  }
)
1个回答

0

注意:原问题是关于一个遗留版本(2.2.3),但我发现对于现代版本,同样的问题也很有用。

所以基本上,watchSources是一个SBT键,用于触发执行功能。

相反,playMonitoredFiles是由PlayFramework sbt插件定义的TaskKey,它控制一组目录,由开发服务器(sbt run)监视以获取自动重新加载功能。

在启动sbt运行时,对于每个请求,都会检查playMonitoredFiles定义的目录,如果发现任何更改,则会触发静默重新编译。这意味着关闭服务器,重新编译并重新启动。

playMonitoredFiles的默认值是在playMonitoredFilesTask中计算的。

例如,我们在资源中添加了某个版本文件,在每次编译时都会重新计算。我们需要PlayFramework避免在开发过程中检查此文件的更改,因为在每个请求上,自动重新编译会重新生成此文件,并且play标记源代码需要重新编译,但是没有Java文件被重新编译,也没有打印任何内容,因此我们不得不调试应用程序以找到问题所在。 此设置仅适用于开发服务器(sbt run)。

build.sbt中的项目设置中,可以覆盖该任务以排除目录(在示例中为target/version目录):

.settings(
...,
playMonitoredFiles := playMonitoredFiles.value.filterNot {
    _.getPath() endsWith String.format("target%sversion", File.separator)
  }
...,
)

该值的类型为文件,且仅包含目录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接