Playframework 如何从scala.js添加JavaScripts的输出路径来播放?

Playframework 如何从scala.js添加JavaScripts的输出路径来播放?,playframework,sbt,scala.js,Playframework,Sbt,Scala.js,我试图让play(确切地说是sbt web)访问从scala.js创建的javascript文件 使用Assets+=中的UnmanagedResourceDirectory,我可以为sbt web设置paht以自动复制到正确的资产目录。问题是我不会硬编码javascript文件的路径 My Build.scala如下所示: import play.Play._ import com.typesafe.sbt.web.Import.Assets import scala.scalajs.sbtp

我试图让play(确切地说是sbt web)访问从scala.js创建的javascript文件

使用Assets+=中的
UnmanagedResourceDirectory,我可以为sbt web设置paht以自动复制到正确的资产目录。问题是我不会硬编码javascript文件的路径

My 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)
}
导入play.play_
导入com.typesafe.sbt.web.import.Assets
导入scala.scalajs.sbtplugin.ScalaJSPlugin_
导入scala.scalajs.sbtplugin.ScalaJSPlugin.ScalaJSKeys_
对象构建扩展了sbt.Build{
覆盖def rootProject=Some(jvm)
lazy val js=project
.设置(缩放设置:*)
.设置(
规模规避:=“2.11.2”
)
lazy val jvm=project
.settings(play.PlayScala)
塞廷斯先生(
scalaVersion:=“2.11.2”,
//这是一条有趣的线路
Assets+=(js.value中的目标)中的UnmanagedResourceDirectory/“scala-2.11”,
在compile中编译,而不是使用
(js中的target).value/“scala-2.11”
,您可以使用
(js中的crossTarget).value
。它将根据您的scala版本附加到右边的子目录

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

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

请查看。这是一个额外的sbt插件,有助于集成jvmth Play/sbt网站

您的构建文件将如下所示(从自述文件复制):


我已经为这个解决方案工作了将近3天。其中大部分是关于如何将js输出集成到自动重新加载中。我的建议是:

1.将目标路径添加到游戏资源中不是很合适。因为,好吧,只是不整洁和用于游戏的护甲打印控制等

2.将文件复制到assets文件夹。一开始很好。但是,当我添加triggeredBy或dependsOn时,尝试让play自动重新加载并进行复制。问题发生了:复制总是会被多次调用,服务器会被击晕,无论我如何从wathSources中排除资产

3.更改js输出路径。我最终回到了这种方法。有些人试图更改artifactPath的值,但我无法解决这个问题

我在下面所做的:

//configure a specific directory for scalajs output
val scalajsOutputDir = Def.settingKey[File]("directory for javascript files output by scalajs")
// make all JS builds use the output dir defined later
lazy val jsOutputSettings = Seq(fastOptJS, fullOptJS, packageJSDependencies, packageScalaJSLauncher, packageMinifiedJSDependencies) map { packageJSKey =>
  crossTarget in(Compile, packageJSKey) := scalajsOutputDir.value
}
我使用sbt的inspect来查找PackageNifiedJSDependencies


希望我能帮助以后遇到这个问题的人。

Thx,我喜欢设置
artifactPaht
的解决方案。有没有办法设置启动器的路径?(
ScalaJSKeys.persistLauncher:=true
)是的,您可以在(Compile,packageScalaJSLauncher)中设置
artifactPath
。另请参见:artifactPath对我来说也不太好。它不会影响-jsdeps.js文件。此外,在执行清理任务时,如何清理scalajsOutputDir?
//configure a specific directory for scalajs output
val scalajsOutputDir = Def.settingKey[File]("directory for javascript files output by scalajs")
// make all JS builds use the output dir defined later
lazy val jsOutputSettings = Seq(fastOptJS, fullOptJS, packageJSDependencies, packageScalaJSLauncher, packageMinifiedJSDependencies) map { packageJSKey =>
  crossTarget in(Compile, packageJSKey) := scalajsOutputDir.value
}