【问题标题】:Configure Play! 2.0 to copy html files from assets folder to public folder?配置播放! 2.0 将 html 文件从 assets 文件夹复制到 public 文件夹?
【发布时间】:2013-01-15 05:28:16
【问题描述】:

我目前正在使用 Play! 2.0 (2.1-RC2) 框架和 Scala。我有一堆“静态” html 文件,它们定义了 AngularJS 使用的视图(我更喜欢使用 Jade,但我似乎无法找到让 Jade 与 Play/Scala 预编译的方法。这使得感觉,因为 Jade 模板通常不是静态的)。

对我(作为一名开发人员)和我的项目结构最有意义的事情是将这些 html 文件与我的咖啡放在同一个位置,并减少文件 (/assets/*)。我知道 Play 希望我将它们放在我的公共文件夹中,但是我很难做到这一点。对我来说,公共文件夹应该用于库和生成的文件。

我想做的是以某种方式让 Play 将 /assets/views 中的 html 文件复制到 /public/views 作为构建的一部分。我怎么能做到这一点?

提前非常感谢!

【问题讨论】:

    标签: scala playframework-2.0


    【解决方案1】:

    如果您将静态 html 文件放在 public/htmls 下,您可以通过以下方式获取模板中单个文件的路径:

    @routes.Assets.at("htmls/yourfile.html")

    【讨论】:

    • 我知道如果我将它们放在 /public 中,我可以轻松地做到这一点。但是,将它们放在 /assets 文件夹中然后将它们复制到对我和我的项目来说更有意义public,就像 play 对 CoffeeScript、Less 和它们的模板文件所做的一样(不过,它显然可以跳过编译步骤)。
    【解决方案2】:

    我能够在 Scalatra 测试项目中弄清楚如何做到这一点,所以我只需要修改以下代码以使其适应 Play 的文件夹结构。但是,它确实有效。它的作用是定义一个新的 sbt “插件”,并在编译时将 /src/main/html 中的所有文件复制到 /resource_managed/main/views。

    希望有人会觉得这很有用!

    import sbt._
    import Keys._
    import java.io.File
    import org.apache.commons.io.FileUtils._
    
    object CopyViews extends sbt.Plugin {
      import CopyViewsKeys._
    
      object CopyViewsKeys {
        val copy = TaskKey[Unit]("copy-views", "Copy views into resourceManaged.")
      }
    
      private def copyViewsTask = (streams, sourceDirectory in copy, resourceManaged in copy) map {
        (out, source, destination) =>
          out.log.info("Copying Views to " + destination.getAbsolutePath())
          copyDirectory(source, destination)
      }
    
      def copyViewsSettingsIn(c: Configuration): Seq[Setting[_]] =
        inConfig(c)(Seq(
          sourceDirectory in copy <<= (sourceDirectory in c) { _ / "html" },
          resourceManaged in copy <<= (resourceManaged in c) { _ / "views" },
          copy <<= copyViewsTask
        )) ++ Seq(
          compile in c <<= (compile in c).dependsOn(copy in c)
        )
    
      def copyViewsSettings: Seq[Setting[_]] = 
        copyViewsSettingsIn(Compile)
    }
    
    object ModFallBuild extends Build {
      import CopyViews._ // Import in our Build so we can use in our build.sbt file.
    
      lazy val modfall = Project("modfall", file("."))
    }
    

    现在,我们可以在 build.sbt 文件中添加

    seq(copyViewsSettings:_*)
    

    现在在编译时复制视图:)

    我敢肯定,可能有一种更简单的方法可以做到这一点,但这对我有用,并且能够让我了解构建 sbt 插件! :P

    【讨论】:

    • 我参加聚会有点晚了,但你认为可以使用通配符吗?例如将文件从 src/main/plugins/*/js 复制到 /resource_managed/main/plugins/*/js
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    相关资源
    最近更新 更多