【问题标题】:activator dist: Not include managed resources (only their processed result)activator dist:不包括托管资源(仅包括它们的处理结果)
【发布时间】:2015-03-16 10:18:47
【问题描述】:

如何避免包含托管资源,例如 activator dist 的 zip 输出中的 sass 文件? 我从项目的目标目录中手动删除了它们,这样我的项目现在在目标目录中没有 scss 文件的踪迹。但这仍然包括 zip 中资产 jar 中的所有 scss 文件。 有什么方法可以避免这种情况,手动或非手动?

【问题讨论】:

    标签: playframework playframework-2.0 typesafe-activator


    【解决方案1】:

    看看Sbt-filter。它是一个插件,用于过滤哪些文件包含在您的 dist 中,哪些文件不包含。您可以将过滤器添加到您的build.sbt。 您必须通过将过滤器插件添加到您的管道阶段来启用它:

    lazy val root = (project in file(".")).enablePlugins(SbtWeb)
    
    pipelineStages := Seq(filter)
    

    进一步包括 css 和排除 scss 添加以下行: 注意:包含 CSS 文件不是必需的,只是作为如何包含某些文件的示例。

    includeFilter in filter := "*.css"
    
    excludeFilter in filter := "*.scss"
    

    【讨论】:

    • 如何添加一个完整的目录,比如我有 javascripts/vendor/a.js,而 javascripts/vendor/b.js,“vendor/*.js”不起作用。跨度>
    • 尝试“javascript/vendor/*.js”或“/vendor/.js”。虽然我无法立即对其进行测试,但我认为过滤器要么仅适用于文件名,要么必须包含整个路径(或适当的通配符)
    【解决方案2】:

    将以下代码放入 build.sbt 是排除目录的一种方法:

    includeFilter in filter := new FileFilter {
      def accept(pathname: File): Boolean = {
        pathname.getAbsolutePath.contains("public/uploads/")
      }
    }
    
    pipelineStages := Seq(filter, digest, gzip)
    

    更多解释

    来自https://github.com/sbt/sbt/blob/9ee8299383afb8c64f175acd9d3cb8648be519b6/util/io/src/main/scala/sbt/NameFilter.scala#L97

    字符串被隐式转换为 GlobFilter。 GlobFilter 可以转换为 AllPassFilter、ExactFilter 和 PatternFilter。

    这 3 个过滤器继承自 NameFilter。而 NameFilter 仅根据文件/目录的名称(不是整个绝对路径)过滤文件/目录。

    所以,在某种程度上,如果你想删除目录“uploads”,你可以:

    includeFilter in filter := "uploads"
    

    我不喜欢这个解决方案,它看起来有问题,因为可能有多个名为“uploads”的文件夹。这就是我选择实现自己的 FileFilter 的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      相关资源
      最近更新 更多