2016-03-12 15 views
5

Sto usando resourceGenerators chiave SBT per copiare i file .js fastOptJs -Generata quando si utilizza products, in questo modo:Come posso copiare le mappe sorgente Scala.js utilizzando resourceGenerators?

(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) 
      }) 

L'esecuzione del seguente a sbt, posso vedere il percorso del file generato:

> 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 

Allo stesso modo, posso facilmente vedere dove launcher Scala.js generati finisce:

> 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 

non posso, come mai, trovare un compito/chiave che mi punti alla posizione del file .js.map. Ho provato a cercare nelle fonti dei plugin, ma non sono riuscito a trovarlo. C'è un modo per farlo senza ricorrere alla creazione di una mappatura manuale in build.sbt?

risposta

5

Le mappe sorgente generate da Scala.js hanno sempre il nome del file .js corrispondente + ".map". Quindi puoi trovare quello associato a f1 con f1.getParentFile/(f1.getName + ".map").

Btw, nessuna nuova build deve utilizzare <+=. Il più comprensibile += dovrebbe essere utilizzato al posto:

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) 
} 

e per evitare il in Compile ovunque, è possibile utilizzare 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) 
    } 
)) 
+1

Grazie, ha funzionato. Tuttavia, ritengo che sarebbe più sicuro se il plugin potesse fornire quella posizione come una chiave sbt, invece di manipolare i percorsi. –

+1

Sentitevi liberi di [presentare una richiesta di funzionalità] (https://github.com/scala-js/scala-js/issues). – sjrd

Problemi correlati