vmunier / Akka Http Scalajs.g8
Labels
Projects that are alternatives of or similar to Akka Http Scalajs.g8
Akka HTTP with Scala.js
This is a Giter8 template showing how you can integrate an Akka HTTP project with a Scala.js project.
Run the application
$ sbt new vmunier/akka-http-scalajs.g8
$ cd akka-http-scalajs
$ sbt
> project 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 client
Features
The application uses the sbt-web-scalajs sbt plugin and the scalajs-scripts library.
-
compile
,run
,reStart
trigger the Scala.jsfastOptJS
task -
~compile
,~run
,~reStart
continuous compilation is also available - Set
scalaJSStage
toFullOptStage
when packaging your application forfullOptJS
to be executed instead offastOptJS
:sbt 'set scalaJSStage in Global := FullOptStage' universal:packageBin
- Source maps
- Open your browser dev tool to set breakpoints or to see the guilty line of code when an exception is thrown.
- Source Maps are enabled in both
fastOptJS
andfullOptJS
by default. If you wish to disable Source Maps infullOptJS
, then addscalaJSLinkerConfig in (Compile, fullOptJS) ~= (_.withSourceMap(false))
in the Scala.js projects.
Load the server project at sbt startup
Add the following line to build.sbt
if you wish to load the server project at sbt startup:
onLoad in Global := (onLoad in Global).value.andThen(state => "project server" :: state)
Cleaning
The root project aggregates all the other projects by default. Use this root project to clean all the projects at once.
$ sbt
> clean
IDE integration
IntelliJ
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.
Eclipse
- Add
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.2.4")
toproject/plugins.sbt
- Add the following lines to the
server
's settings inbuild.sbt
:
// Compile the project before generating Eclipse files, so that generated .scala or .class files for Twirl templates are present
EclipseKeys.preTasks := Seq(compile in Compile)
- Run
$ sbt "eclipse with-source=true"
- Inside Eclipse,
File/Import/General/Existing project...
, choose the root folder. Uncheck the third checkbox to only import client, server and shared/.jvm, clickFinish
.
Classpath during development
The assets (js files, sourcemaps, etc.) are added to the classpath during development thanks to the following lines:
WebKeys.packagePrefix in Assets := "public/",
managedClasspath in Runtime += (packageBin in Assets).value
Note that packageBin in Assets
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 WebKeys.packagePrefix in Assets
during development, you can use the following code instead:
lazy val server = (project in file("server")).settings(
...
WebKeys.packagePrefix in Assets := "public/",
WebKeys.exportedMappings in Assets ++= (for ((file, path) <- (mappings in Assets).value)
yield file -> ((WebKeys.packagePrefix in Assets).value + path)),
...
)