2015-08-12 3 views
0

Каким образом позвонить в Scala.js из Node.js? Код ниже работает, но мне не нравится .__ ScalaJSExportsNamespace в строке require в run.js. Также важно, чтобы я получил текст «someTest()»! фактически напечатан на моем терминале.Каков правильный способ вызвать Scala.js из Node.js?

run.js

var fastopt = require('./scalajs-hello-world-fastopt').__ScalaJSExportsNamespace; 
var run = fastopt.RunMe(); 

run.main(); 
console.log(run.helloWorld()); 
console.log(run.someTest()); 

RunMe.scala

import scala.scalajs.js.annotation._ 
import scala.scalajs.js.JSApp 

@JSExportAll 
object RunMe extends JSApp { 

    def main(): Unit = { 
    println("Hello from main()!") 
    } 

    def helloWorld() = "Hello from helloWorld()!" 

    def someTest() = { 
    println("someTest() called!") 
    s"In Scala.js, (1.0).toString is ${(1.0).toString}!" 
    } 

} 

Выходной

$ node run 
Hello from main()! 
Hello from helloWorld()! 
someTest() called! 
In Scala.js, (1.0).toString is 1! 
+0

Лучший способ вызвать Scala.js из узла - установить пространство имён экспорта Scala.js в 'export'. Это фактически сделает его надлежащим модулем узла. Какую версию Scala.js вы используете? (Похоже, что он старше, IIRC '__ScalaJSExportsNamespace' больше не существует в более поздних версиях). – gzm0

+0

@ gzm0: Я использую Scala.js 0.6.4 и Scala 2.11.7. Должны быть самые новые версии. Я нашел ответ (1) от вас. Это все еще путь? Используете ли вы Grunt для добавления пространства имен экспорта? (1) http://stackoverflow.com/questions/26637600/how-to-convert-scala-js-application-to-commonjs-module – user1091344

+0

Да, это все еще путь. Вы можете использовать любой инструмент, который вам нравится. Я лично использовал sbt, только потому, что я больше всего знаком с ним. – gzm0

ответ

1

Вы можете настроить Scala. JS для создания модуля стиля CommonJS, добавив следующие строки в файл сборки (начиная с Scala.js 0.6.5):

scalaJSOutputWrapper := ("var __ScalaJSEnv = { exportsNamespace: exports };", "") 

Более подробную информацию о this SO post.

Смежные вопросы