jbrown
jbrown

Reputation: 7996

How do you actually run scalajs code in nodejs?

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

Answers (1)

sjrd
sjrd

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

Related Questions