【问题标题】:Embedding resources in scala.js在 scala.js 中嵌入资源
【发布时间】:2017-11-19 06:01:44
【问题描述】:

我有一个需要从 scala.js 访问的本地化资源文件。它需要位于脚本执行环境的本地(即,不从服务器异步加载,如 How to read a resource file in Scala.js? 建议的那样)。

是否有任何机制可以将小资源文件的内容直接嵌入到从 scala.js 文件编译的生成的 javascript 中?基本上,我想要这样的东西:

object MyResource {
    @EmbeddedResource(URL("/my/package/localized.txt"))
    val resourceString: String = ???
}

这显然会使生成的 .js 文件有些膨胀,但这对我的应用程序来说是可以接受的折衷方案。看起来这不是一个罕见的需求,而且这个宏应该已经存在于某个地方,但我最初的搜索没有发现任何东西。

【问题讨论】:

  • AFAIK 没有您所描述的机制。老实说,那时我可能只是将其编码为源代码文件......

标签: scala scala.js


【解决方案1】:

如果您使用的是 sbt,您可以使用 源生成器,它会读取您的资源文件并将其序列化到 val 中的 object 中:

sourceGenerators in Compile += Def.task {
  val baseDir = baseDirectory.value / "custom-resources" // or whatever
  val resourceFile = baseDir / "my/package/localized.txt"

  val sourceDir = (sourceManaged in Compile).value
  val sourceFile = sourceDir / "Localized.scala"

  if (!sourceFile.exists() ||
      sourceFile.lastModified() < resourceFile.lastModified()) {
    val content = IO.read(resourceFile).replaceAllLiterally("$", "$$")

    val scalaCode =
      s"""
      package my.package.localized

      object Localized {
        final val content = raw\"\"\"$content\"\"\"
      }
      """

    IO.write(sourceFile, scalaCode)
  }

  Seq(sourceFile)
}.taskValue

如果您使用的是其他构建工具,我相信您可以使用类似的源生成器概念。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 2023-04-08
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多