如何使用resourceGenerators复制Scala.js源映射?

Pat*_*zna 6 scala sbt scala.js

我在使用时使用resourceGeneratorssbt键来复制fastOptJs生成的.js文件products,如下所示:

(resourceGenerators in Compile) <+=
        (fastOptJS in Compile in frontend, packageScalaJSLauncher in Compile in frontend, packageJSDependencies in Compile in frontend)
          .map((f1, f2, f3) => {
            Seq(f1.data, f2.data, f3)
          })
Run Code Online (Sandbox Code Playgroud)

在sbt中运行以下命令,我可以看到生成文件的路径:

> show frontend/fastOptJS
[info] Attributed(/some/path/frontend/target/scala-2.11/frontend-fastopt.js)
[success] Total time: 0 s, completed Mar 12, 2016 1:59:22 PM
Run Code Online (Sandbox Code Playgroud)

同样,我可以很容易地看到Scala.js生成的启动器结束的位置:

> show frontend/packageScalaJSLauncher
[info] Attributed(/some/path/frontend/target/scala-2.11/frontend-launcher.js)
[success] Total time: 0 s, completed Mar 12, 2016 2:00:10 PM
Run Code Online (Sandbox Code Playgroud)

但是,我无法找到指向.js.map文件位置的任务/密钥.我试着查看插件来源,但找不到它.有没有办法在不诉诸创建手动映射的情况下做到这一点build.sbt

sjr*_*jrd 5

Scala.js生成的源映射始终具有相应.js文件的名称+ ".map".所以,你可以找到相关的一个f1f1.getParentFile / (f1.getName + ".map").

顺便说一句,没有新的构建应该使用<+=.+=应该使用更容易理解的:

resourceGenerators in Compile += Def.task {
  val f1 = (fastOptJS in Compile in frontend).value.data
  val f1SourceMap = f1.getParentFile / (f1.getName + ".map")
  val f2 = (packageScalaJSLauncher in Compile in frontend).value.data
  val f3 = (packageJSDependencies in Compile in frontend).value
  Seq(f1, f1SourceMap, f2, f3)
}
Run Code Online (Sandbox Code Playgroud)

并避免in Compile到处,你可以使用inConfig(Compile):

inConfig(Compile)(Seq(
  resourceGenerators += Def.task {
    val f1 = (fastOptJS in frontend).value.data
    val f1SourceMap = f1.getParentFile / (f1.getName + ".map")
    val f2 = (packageScalaJSLauncher in frontend).value.data
    val f3 = (packageJSDependencies in frontend).value
    Seq(f1, f1SourceMap, f2, f3)
  }
))
Run Code Online (Sandbox Code Playgroud)