如何将 JavaScripts 的输出路径从 scala.js 添加到 Play?

sem*_*tic 4 sbt playframework scala.js

我正在尝试玩(完全是 sbt-web)以访问从 scala.js 创建的 javascript 文件。

有了unmanagedResourceDirectories in Assets +=我能为SBT-网的paht设置为自动复制到正确的资产目录。问题是我不会硬编码 javascript 文件的路径。

我的 Build.scala 看起来像这样:

import play.Play._
import com.typesafe.sbt.web.Import.Assets
import scala.scalajs.sbtplugin.ScalaJSPlugin._
import scala.scalajs.sbtplugin.ScalaJSPlugin.ScalaJSKeys._

object Build extends sbt.Build {
    override def rootProject = Some(jvm) 

    lazy val js = project
                    .settings(scalaJSSettings: _*)
                    .settings(
                       scalaVersion := "2.11.2"
                    )

    lazy val jvm = project
                     .settings(play.PlayScala)
                     .settins(
                       scalaVersion := "2.11.2",
                       // This is the interesting line
                       unmanagedResourceDirectories in Assets += (target in js).value / "scala-2.11",
                       compile in Compile <<= (compile in Compile) dependsOn (fastOptJS in (js, Compile))
                     )
                     .aggregate(js)
}
Run Code Online (Sandbox Code Playgroud)

有没有办法从 scala.js 获取 javascript 的输出路径?

(target in js).value / "scala-2.11"有效,但资产输出中有硬编码scala-2.11classes目录。

另一个问题是文件现在位于web/public/main/而不是web/public/main/js.

sjr*_*jrd 5

相反(target in js).value / "scala-2.11",您可以使用(crossTarget in js).value. 它将附加正确的子目录,具体取决于您的 Scala 版本。

由 生成的文件的完全限定名称fastOptJS in (js, Compile)artifactPath in (js, Compile, fastOptJS),这是 sbt 中的惯例。

您也可以fastOptJS通过修改artifactPath来更改目标文件。这可以帮助您解决最后一个问题。该技术可用于将生成的文件直接发送到 jvm 项目的托管资源。

  • 是的,您可以在 (Compile, packageScalaJSLauncher) 中设置`artifactPath。 (2认同)