This is a simple example application showing how you can integrate Finch with Scala.js and Twirl.
The application contains three directories:
serverFinch application (server side)clientScala.js application (client side)sharedScala code that you want to share between the server and the client
$ sbt
> ~re-start
$ open http://0.0.0.0:8080The application uses the sbt-web-scalajs sbt plugin and the scalajs-scripts library.
compile,run,re-starttrigger the Scala.js fastOptJS command~compile,~run,~re-startcontinuous compilation is also available- Production archives (e.g. using
universal:packageBin) contain the optimised javascript - 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 is disabled in production by default to prevent your users from seeing the source files. But it can easily be enabled in production too by setting
emitSourceMaps in fullOptJS := truein the Scala.js projects.
The root project aggregates all the other projects by default.
Use this root project, called finch-scalajs-example, to clean all the projects at once.
$ sbt
> finch-scalajs-example/cleanThe 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)),
...
)
Thanks for the akka-http-with-scalajs-example project on which this project is based upon.