Доступ к выходным данным scala.js в ресурсах

Я пытаюсь создать сервер приложений, используя scala.js, scalatags, akka-http и mill в качестве инструмента сборки. Все идет хорошо, пока браузер не попытается найти скрипты с сгенерированным кодом scala.js. Это код масштабных тегов, который успешно создается и ссылается на скомпилированный код scala.js (HiPage.js - построенный как ScalaJSModule в mill). Когда он запускается, println ниже распечатывает: file:/Users/nnovod/projects/lims/LIMS/resources/HiPage.js, где я действительно разместил вывод javascript из scala.js

object HiPage {
  val boot =
    "Hi().main(document.getElementById('contents'))"
  println(getClass.getResource("/HiPage.js").toString) 
  val skeleton =
    html(
      head(
        script(`type`:="text/javascript", src:="/HiPage.js"),
        link(
          rel:="stylesheet",
          href:="https://cdnjs.cloudflare.com/ajax/libs/pure/0.5.0/pure-min.css"
        )
      ),
      body(
        onload:=boot,
        div(id:="contents")
      )
    )
}

В конечном итоге это отображается в браузере следующим образом:

<html>
<head>
    <script type="text/javascript" src="/HiPage.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/pure/0.5.0/pure-min.css"/>
</head>
<body onload="Hi().main(document.getElementById('contents'))">
    <div id="contents"></div>
</body>
</html>

Это мой маршрут akka-http...

    val route =
      path("hello") {
        get {
          complete(
            HttpEntity(
              ContentTypes.`text/html(UTF-8)`,
              HiPage.skeleton.render
            )
          )
        }
      }

Браузер никогда не может найти HiPage.js ("Не удалось загрузить ресурс: сервер ответил статусом 404 (не найден)"). HiPage.js находится в каталоге ресурсов верхнего уровня и находится в коде с помощью println(getClass.getResource("/HiPage.js"). ToString). Что мне нужно сделать, чтобы его увидеть, когда браузер запрашивает его с сервера?

1 ответ

Решение

Не уверен, что это лучший способ, но я, наконец, смог решить проблему, начав все ссылки src в скрипте с /resource, а затем отредактировав мой маршрут akka-http, включив в него следующее:

        pathPrefix("resource") {
          extractUnmatchedPath { unmatched =>
            val resource = unmatched.toString()
            if (!resource.startsWith("/"))
              reject()
            else
              getFromResource(resource.substring(1))
          }
        }
Другие вопросы по тегам