2016-03-12 25 views
5

Tôi đang sử dụng resourceGenerators chính SBT để sao chép fastOptJs file .js -generated khi sử dụng products, như thế này:Làm cách nào để sao chép bản đồ nguồn Scala.js bằng cách sử dụng trình tạo tài nguyên?

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

Chạy sau trong SBT, tôi có thể xem đường dẫn của tập tin được tạo ra:

> 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 

Tương tự như vậy, tôi có thể dễ dàng nhìn thấy nơi phóng Scala.js tạo kết thúc:

> 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 

tôi có thể không, làm thế nào bao giờ hết, hãy tìm một nhiệm vụ/khóa sẽ trỏ tôi đến vị trí của .js.map tệp. Tôi đã thử tìm kiếm trong các nguồn plugin, nhưng không thể tìm thấy nó. Có cách nào để thực hiện điều đó mà không cần phải tạo bản đồ thủ công trong build.sbt không?

Trả lời

5

Bản đồ nguồn được tạo bởi Scala.js luôn có tên của tệp .js tương ứng + ".map". Vì vậy, bạn có thể tìm thấy một liên kết với f1 với f1.getParentFile/(f1.getName + ".map").

Btw, không có bản dựng mới nào nên sử dụng <+=. Các dễ hiểu hơn += nên được sử dụng thay vì:

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

và để tránh các in Compile ở khắp mọi nơi, bạn có thể sử dụng 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

Cảm ơn, nó làm việc. Tuy nhiên, tôi cảm thấy nó sẽ an toàn hơn nếu plugin có thể cung cấp vị trí đó dưới dạng khóa sbt, thay vì không sử dụng đường dẫn. –

+1

Hãy thoải mái [yêu cầu tính năng] (https://github.com/scala-js/scala-js/issues). – sjrd

Các vấn đề liên quan