如何使用 resourceGenerators 复制 Scala.js 源地图?
How can I copy Scala.js source maps using resourceGenerators?
我在使用 products
时使用 resourceGenerators
sbt 密钥复制 fastOptJs
生成的 .js 文件,如下所示:
(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)
})
运行 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
同样,我可以很容易地看到 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
但是,我无法找到可以指向 .js.map
文件位置的 task/key。我试着查看插件源,但找不到。有什么方法可以做到这一点而无需在 build.sbt
中创建手动映射?
Scala.js 生成的源映射始终具有相应 .js 文件的名称 + ".map"
。所以你可以用 f1.getParentFile / (f1.getName + ".map")
.
找到与 f1
关联的那个
顺便说一句,新版本不应该使用 <+=
。比较好理解的应该用+=
代替:
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)
}
为了避免到处都是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)
}
))
我在使用 products
时使用 resourceGenerators
sbt 密钥复制 fastOptJs
生成的 .js 文件,如下所示:
(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)
})
运行 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
同样,我可以很容易地看到 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
但是,我无法找到可以指向 .js.map
文件位置的 task/key。我试着查看插件源,但找不到。有什么方法可以做到这一点而无需在 build.sbt
中创建手动映射?
Scala.js 生成的源映射始终具有相应 .js 文件的名称 + ".map"
。所以你可以用 f1.getParentFile / (f1.getName + ".map")
.
f1
关联的那个
顺便说一句,新版本不应该使用 <+=
。比较好理解的应该用+=
代替:
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)
}
为了避免到处都是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)
}
))