Обслуживание активов Scala.js

Я начал новый проект с Finch и Scala.js, где backend и frontend должны поделиться некоторым кодом.

И я обеспокоен хорошим способом обслуживания JS, созданным fastOptJS Финч. В настоящее время я использую пользовательскую задачу SBT, которая копирует файлы из js/target/scala-2.11/*.js в jvm/src/main/resources, Но мне интересно, есть ли лучший способ сделать это.

Я видел классное руководство по SPA, которое использует плагин sbt-play-scalajs, но, похоже, применимо только для Play.

1 ответ

Решение

Один из подходов, который я успешно использовал, включает 3 проекта sbt и дополнительную папку в корне для статического контента:

.
├── build.sbt
├── client
├── server
├── shared
└── static

в build.sbtЗатем вы бы использовали что-то вроде следующего:

lazy val sharedSettings = Seq(
  // File changes in `/static` should never trigger new compilation
  watchSources := watchSources.value.filterNot(_.getPath.contains("static")))

lazy val server = project
  .settings(sharedSettings: _*)
  // Adds `/static` to the server resources
  .settings(unmanagedResourceDirectories in Compile += baseDirectory.value / ".." / "static")

lazy val client = project
  .enablePlugins(ScalaJSPlugin)
  .settings(sharedSettings: _*)
  // Changes Scala.js target folder to "/static/content/target"
  .settings(Seq(fullOptJS, fastOptJS, packageJSDependencies, packageScalaJSLauncher, packageMinifiedJSDependencies)
    .map(task => crossTarget in (Compile, task) := file("static/content/target")))

Все ваши активы могут быть доступны как стандартные ресурсы, а затем будут упакованы в ваш толстый сосуд, если вы используете что-то вроде sbt-assembly,

Другие вопросы по тегам