在 Play 中,如何将 js 文件从 ScalaJS 客户端复制到服务器?

In Play, how to copy js files from ScalaJS client to server?

我正在尝试编写一个部分是 ScalaJS 和部分 Play 框架的应用程序。我正在使用 ScalaJS bundler。它很好地捆绑了我的 JavaScript,我可以在它们应该去的地方看到生成的文件。

但我注意到该应用程序只能使用 client-jsdeps.jsclient-fastopt.js。原因是它们是唯一复制到路径 server/target/web/public/main 的文件。我找遍了所有我能想到的地方,sbt 构建文件、配置文件,到处都是,但我找不到为什么这些文件被复制而没有其他文件。我想改为复制 -bundle 文件。该设置在哪里?

值得注意的是,与应用程序打包的两个文件并没有出现在用户可编辑的路径中,server/public/js,它们被直接复制到WAR文件中,因此可见在 target 目录中。

来自documentation

对于 sbt-web 集成,使用 sbt-web-scalajs-bundler 插件而不是 sbt-scalajs-bundler:

addSbtPlugin("ch.epfl.scala" % "sbt-web-scalajs-bundler" % "0.13.1")

然后,在使用 sbt-web 的项目上启用 WebScalaJSBundlerPlugin:

lazy val server = project
  .settings(
    scalaJSProjects := Seq(client),
    pipelineStages in Assets := Seq(scalaJSPipeline)
  )
  .enablePlugins(WebScalaJSBundlerPlugin)

lazy val client = project.enablePlugins(ScalaJSBundlerPlugin, ScalaJSWeb)

您还需要在 Scala.js 项目上设置 ScalaJSBundlerPlugin,如前一节所述,并且 在 their documentation.

中描述的 sbt-web-scalajs 插件

WebScalaJSBundlerPlugin 插件自动配置要使用的 scalaJSPipeline 任务 包而不是 Scala.js 编译的输出。

你可以看到一个完整的例子here


你遵循那个指南吗?