Reputation: 501
Suppose that you have a Scala.js project that compiles meaningfully to browser JavaScript, Node.js, and JVM.
Now imagine that in the browser, part of the application runs in the window while another part runs in a web worker.
Can SBT bundle two versions of the source code? One version has a main class for the browser window, while the other has a different main class that runs the web worker code?
If so, how would you configure this?
Please note that the project depends on JavaScript native libraries and webpack.
Upvotes: 1
Views: 110
Reputation: 781
I'm doing exactly that in one of my projects, but with a main
-class only for the JVM. The browser loads the transpiled scalajs-code and a small hook method, triggered by a js-file, initializing the core, with different parameters. This does work for Webworker
and Frontend-thread and even for a SharedWorker
This could look like that:
importScripts("client-fullopt.js");
importScripts("conf/app-config.js");
MyProject.WebWorkerActorParent.initBackend(myProjectConfig);
MyProject.WebWorkerActorParent.addWorker(this);
at the frontend it could be a global script import and another initialization routine.
<script src='client-fullopt.js' />
<script>
MyProject.WebWorkerActorParent.initFrontend();
</script>
Of course, nothing prevents you to additionally create different subprojects in sbt
, that all use the same, common library-project and bundle their specific needs for the target platform in a separate project.
Upvotes: 2