前回の記事の続きで、Nodeで動かすところをやる。
Node.js
Node.jsでREPLを動かすためのスクリプトを作る。
touch node_repl.clj
中身は以下のように書き込む。
(require 'cljs.repl) (require 'cljs.build.api) (require 'cljs.repl.node) (cljs.build.api/build "src" {:main 'hello-world.core :output-to "out/main.js" :verbose true}) ; ここを cljs.repl.browser/repl-env から cljs.repl.node/repl-env に変更しただけ。 (cljs.repl/repl (cljs.repl.node/repl-env) :watch "src" :output-dir "out")
実行する。
rlwrap java -cp cljs.jar:src clojure.main node_repl.clj
依存関係
reactを使ってみる。
まずは、reactのjarをプロジェクトのルートにダウンロード
curl -O https://clojars.org/repo/cljsjs/react/0.12.2-8/react-0.12.2-8.jar
続いて、src/hello_world/core.cljs
を以下のように、reactのライブラリをロードするように書き換える。
(ns hello-world.core (:require cljsjs.react)) (enable-console-print!) (println "Hello React!")
実行する。
java -cp cljs.jar:src:react-0.12.2-8.jar clojure.main build.clj
ブラウザでindex.html
を開いて、コンソールにhello react!
と表示されていればうまくいっている。
複数のjarを依存に含めたい場合は、lib
というディレクトリを作って、そこに放り込み、ワイルドカードでそれらを指定するという方法がある。
mkdir lib mv react-0.12.2-8.jar lib/
前回の続きの内容を含めて、ここまでで以下のようなファイル構成になっている。
➜ hello_cljs tree -I "out" . ├── build.clj ├── cljs.jar ├── index.html ├── lib │ └── react-0.12.2-8.jar ├── node_repl.clj ├── release.clj ├── repl.clj ├── src │ └── hello_world │ └── core.cljs └── watch.clj 3 directories, 9 files
以下のようにして実行できる。
java -cp 'cljs.jar:lib/*:src' clojure.main build.clj
ここまでで作った内容は githubにあげた。jarまでcommitすると重いので、jarは除いている。
javaコマンドからビルドする所から学べて良いチュートリアルだったと思う。しかし、ちょっと長かった。実際は、Leiningen(やBoot?)を使ってビルドしたりすると思うので、最初にこういう操作を一通り見ておくのは意義がある。
さて、次は、AWSのLambdaから利用したいのだが。。