2016-01-13 55 views
3

我正在開發一個後端聊天服務器。它目前用雜亂的回調javascript編寫,所以我正在考慮將它移植到scalajs。你如何真正在nodejs中運行scalajs代碼?

我一直在瀏覽初學者的指南,但我找不到如何將項目實際編譯爲可以使用節點運行的單個JavaScript文件(例如node ./target/scala_2.11/my-project.js)。

如何編譯單個文件,您可以直接作爲節點程序運行,而不是在瀏覽器中運行?

我的代碼再簡單不過了:

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正確打印:

*** Did something *** 
Trying to print something... 

但是當我運行sbt fullOptJS然後node ./target/scala-2.11/example-opt.js沒有打印到控制檯。

+0

你爲什麼不直接在sbt鍵入'run'? – gzm0

+0

你如何部署? – jbrown

+0

你不:)但要公平,sbt本身不會部署。 – gzm0

回答

7

example-opt.js不包含用於實際啓動代碼的JavaScript的一行。它只定義了example.ScalaJSExample().main()作爲一個函數,但它不會調用它。

一個簡單的方法,使之自動調用該函數是指導SBT到在.js文件與此SBT設置末尾添加呼叫:

scalaJSOutputWrapper := ("", "example.ScalaJSExample().main();") 

這將允許您只調用

node ./target/scala-2.11/example-opt.js 
+1

謝謝,我幾乎認爲我必須手動編寫包裝。 – jbrown

+1

@sjrd在我的POC中使'run'啓動代碼兩次。任何方式來避免這種情況? –