Play Framework:如何不查看文件夹以了解 Play Framework 中的更改

Posted

技术标签:

【中文标题】Play Framework:如何不查看文件夹以了解 Play Framework 中的更改【英文标题】:Play Framework : how to not watch a folder for changes in Play Framework 【发布时间】:2015-04-26 21:43:12 【问题描述】:

我正在使用 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")  
)

【问题讨论】:

【参考方案1】:

注意:最初的问题是关于旧版本 (2.2.3),但我发现同样的问题对现代版本很有用。

所以基本上 watchSources 是用于triggered-execution 功能的 SBT 密钥。

相反,playMonitoredFiles是PlayFramework sbt-plugin定义的TaskKey,控制了一组目录供其观看 用于自动重新加载功能的开发服务器(sbt 运行)。

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

playMonitoredFiles 的默认值在playMonitoredFilesTask 中计算。

例如,我们将某个版本文件添加到我们的资源中,在每次编译中计算。我们需要 PlayFramework 来避免检查此文件的更改 在开发中,因为在每个请求中,自动重新编译都会重新生成这个文件并播放标记要重新编译的源,但是没有重新编译 java 文件并且 什么都没有打印出来,所以我们必须调试应用程序才能找到问题。 此设置仅适用于开发服务器(sbt 运行)。

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

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

值是文件类型并且只包含目录。

【讨论】:

以上是关于Play Framework:如何不查看文件夹以了解 Play Framework 中的更改的主要内容,如果未能解决你的问题,请参考以下文章

Play Framework中,打包时如何排除文件?

Play Framework (2.5) - JMX port enable to see in JVisualVM

如何使用 Play Framework 2.0 下载文件

部署为 war 文件时如何运行 Play Framework 演变

Play Framework [2.4.x] 如何在子模块的路由文件中处理公共资产

Play Framework:如何在 CRUD 模型中声明不应在 UI 中显示的成员