【问题标题】:Generate HTML files in sbt在 sbt 中生成 HTML 文件
【发布时间】:2016-09-06 13:18:23
【问题描述】:

我有一个带有 index.html 文件的 Scala.js 项目。目前我使用类似Scala.js example 的结构,有两个不同的index.html 文件用于fullOptJSfastOptJS 构建。但是我想以某种方式将其干燥。

我认为应该可以使用一个简单的 Scala 代码替换变量部分,从一个公共源模板生成 index.htmlindex-fastopt.html。也许使用Generating sources and resources 可以实现这一点,但我不确定如何。

【问题讨论】:

    标签: scala sbt scala.js


    【解决方案1】:

    我检查了 scala.js 示例项目并对其进行了一些修改。

    首先,编辑index.html 并替换以下行:

    <script type="text/javascript" src="./target/scala-2.11/example-opt.js"></script>
    <script type="text/javascript" src="./target/scala-2.11/example-launcher.js"></script>
    

    与:

    <script type="text/javascript" src="{{example.js}}"></script>
    <script type="text/javascript" src="example-launcher.js"></script>
    

    接下来,在 build.sbt 中添加以下行:

    def generateIndexTask(suffix: String) = Def.task {
      val source = baseDirectory.value / "index.html"
      val target = (crossTarget in Compile).value / "index.html"
      val log = streams.value.log
      IO.writeLines(target,
        IO.readLines(source).map {
          line => line.replace("{{example.js}}", s"example-$suffix.js")
        }
      )
    
      log.info(s"generate with suffix: $suffix")
    }
    
    (fastOptJS in Compile) <<= (fastOptJS in Compile).dependsOn(generateIndexTask("fastopt"))
    (fullOptJS in Compile) <<= (fullOptJS in Compile).dependsOn(generateIndexTask("opt"))
    

    生成的 index.html 将作为生成 .js 文件位于示例位置:./target/scala-2.11

    您可能应该根据自己的用途调整文件路径。

    对于我自己的项目,我使用另一个结构,在顶层有一个 sbt-web 项目来管理子项目中的所有资产和 scala-js 代码,该子项目将其代码导出为 webjar。它更灵活。

    【讨论】:

    • 工作正常。不过,对于快速/完整 Opt,index.html 输出文件名可能会有所不同。
    • 为此,只需将目标值中的"index.html" 替换为s"index-$suffix.html"。就我个人的喜好而言,我更喜欢总是加载同一个文件,并让构建系统处理正确的生成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 2011-04-14
    • 2016-01-08
    • 1970-01-01
    • 2015-02-25
    • 2013-10-10
    相关资源
    最近更新 更多