This is a Giter8 template showing how you can integrate an Akka HTTP project with a Scala.js project.
$ sbt new vmunier/akka-http-scalajs.g8 $ cd akka-http-scalajs $ sbt sbt:root> project server sbt:server> ~reStart $ open http://localhost:8080
The application contains three directories:
server
Akka HTTP application (server side)client
Scala.js application (client side)shared
Scala code that you want to share between the server and the clientThe application uses the sbt-web-scalajs sbt plugin.
compile
, run
, reStart
trigger the Scala.js fastLinkJS
task~compile
, ~run
, ~reStart
continuous compilation is also availablescalaJSStage
to FullOptStage
when packaging your application for fullLinkJS
to be executed instead of fastLinkJS
:
sbt 'set Global / scalaJSStage := FullOptStage' Universal/packageBin
fastLinkJS
and fullLinkJS
by default. If you wish to disable Source Maps in fullLinkJS
, then add Compile / fullLinkJS / scalaJSLinkerConfig ~= (_.withSourceMap(false))
in the Scala.js projects.The root
project aggregates all the other projects. Use this root project to clean all the projects at once.
Add the following line to build.sbt
if you wish to load the server project at sbt startup:
Global / onLoad := (Global / onLoad).value.andThen(state => "project server" :: state)
clean
will only delete the server's generated files (in the server/target
directory). Call root/clean
to delete the generated files for all the projects.
In IntelliJ, open Project wizard, select Import Project
, choose the root folder and click OK
. Select Import project from external model
option, choose SBT project
and click Next
. Select additional import options and click Finish
. Make sure you use the IntelliJ Scala Plugin v2017.2.7 or higher. There are known issues with prior versions of the plugin.
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.2.4")
to project/plugins.sbt
server
's settings in build.sbt
:// Compile the project before generating Eclipse files, so that generated .scala or .class files for Twirl templates are present
EclipseKeys.preTasks := Seq(Compile / compile)
$ sbt "eclipse with-source=true"
File/Import/General/Existing project...
, choose the root folder. Uncheck the third checkbox to only import client, server and shared/.jvm, click Finish
. The assets (js files, sourcemaps, etc.) are added to the classpath during development thanks to the following lines:
Assets / WebKeys.packagePrefix := "public/",
Runtime / managedClasspath += (Assets / packageBin).value
Note that Assets / packageBin
also executes any tasks appended to pipelineStages
, e.g. gzip
. You may want to avoid executing tasks under pipelineStages
during development, because it could take long to execute.
In that case, in order to still have access to the assets under Assets / WebKeys.packagePrefix
during development, you can use the following code instead:
lazy val server = project.settings(
...
Assets / WebKeys.packagePrefix := "public/",
Assets / WebKeys.exportedMappings ++= (for ((file, path) <- (Assets / mappings).value)
yield file -> ((Assets / WebKeys.packagePrefix).value + path)),
...
)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4