Reputation: 7996
I'm developing a backend chat server. It's currently written in messy callback javascript so I'm considering porting it to scalajs.
I've been looking through the beginner's guides, but I can't find how to actually compile the project to a single javascript file that I can run with node (e.g. node ./target/scala_2.11/my-project.js
).
How do you compile a single file that you can run directly as a node program, and not in the browser?
My code couldn't be simpler:
package example
import scala.scalajs.js
import js.Dynamic.{ global => g }
object ScalaJSExample extends js.JSApp {
def main(): Unit = {
g.console.log("*** Did something ***")
println("Trying to print something...")
}
}
sbt run
correctly prints:
*** Did something ***
Trying to print something...
But when I run sbt fullOptJS
and then node ./target/scala-2.11/example-opt.js
nothing is printed to the console.
Upvotes: 4
Views: 1002
Reputation: 22095
The example-opt.js
does not contain the one line of JavaScript used to actually launch the code. It only defines example.ScalaJSExample().main()
as a function, but it doesn't call it.
An easy way to make it call that function automatically is to instruct sbt to add the call at the end of the .js
file with this sbt setting:
scalaJSOutputWrapper := ("", "example.ScalaJSExample().main();")
This will allow you to just invoke
node ./target/scala-2.11/example-opt.js
Upvotes: 10