LoginSignup
6
5

More than 5 years have passed since last update.

続・Scala.jsをnodeプロジェクトで扱う

Posted at

前回のScala.jsをnodeプロジェクトで扱うの続きです。

前回はsbtベースでScala.jsを実行していましたが、今回はスタンドアローン版を使ってnodeプロジェクトで扱います。

モチベーション

  • sbtベースの場合だと出力先のパスが固定なのが微妙(指定する方法があれば教えてください)
  • というかsbtがツラいからあまり関わりたくない

という感じにちょっとネガティブな感じのモチベーションで進めています。

スタンドアローン版のScala.jsのインストール

bin-wrapperでScala.jsをラップしたものを作ったので、このscalajs-standalone-binとscala-binをインストールします。

$ npm install --save scala-bin scalajs-standalone-bin

brewなどでscalaなどをインストールしていればscala-binをインストールする必要はありませんが、npmScalaのバージョンを含めて管理すると考えるとscala-binをインストールしておくとCI環境などにそのまま出せるので楽で良いです。(ただしプロジェクト毎にScalaをダウンロードするので容量は持ってかれます)

.scalaのコンパイル

コンパイルするためにpackage.jsonscriptsにスタンドアローン版でのコンパイルコマンドを記述します。

package.json
"scripts": {
  "compile": "scalajsc src/main/scala/hoge.scala -d hoge && scalajsld -o hoge.js hoge"
}

注意点としてscalajscで中間ファイルを生成するときに指定するディレクトリは事前に生成しておく必要があります。compilemkdir -p hogeのようにディレクトリ作成コマンドを仕込めば良いのですが、いまいちイケてないので何か良いオプションが欲しいです。

$ npm run compile

コマンドを実行すると成果物としてhoge.jsが出来ていると思います。あとはこれをbabelの乗せるなり、browserifyに乗せるなり、gulpに乗せるなり好きにしてください。(Scala.js v0.6.3からES6モードがサポートされているので、この手のツールに乗せるという選択肢はありになってきたかなという印象です)

おわりに

前回の挫折した話を解消するのにこの構成が欲しくなったので作った閑話休題的な話でした。

とはいえ、この構成を取れるようになったので、sbtベースのnodeプロジェクト、スタンドアローンベースのnodeプロジェクトという選択肢を取れるようになりました。JS <=> Scalaのように世界がまたぐ構成を作るのはまだ無理ですが、ScalaJSのみで完結するところでなら、このどちらかの構成で戦うキッカケになれるかなと思います。

挫折した話を解消する方法は大分見えてきたので、それ用のツールを作ったらまた続きの話でも書きます。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5