二 月
17
土曜日

cljs.build.apiで複数ソースディレクトリをコンパイル対象にする方法

複数のソースディレクトリに含まれるClojureScriptをコンパイルしたい場合、 lein-cljsbuild:source-paths に複数ディレクトリを指定できるのだが、 cljs.build.api/build ではどうしたら良いのかを調べた。


問題

cljs.build.api/build でClojureScriptのコンパイルをする際、ソースディレクトリを一つしか渡せない。

(require 'cljs.build.api)

(cljs.build.api/build "src" {:output-to "out/main.js"})

以下はbuild関数のシグネチャ。

(build source opts)
(build source opts compiler-env)

対応

(require 'cljs.build.api)

(-> (cljs.build.api/inputs "src" "test")
    (cljs.build.api/build opts))

実は cljs.build.api/build の第一引数 source とは抽象化されたソース源を表していて、cljs.closure/Compilable プロトコルを実装したオブジェクトであればどんなものでも渡すことが出来る。

複数ディレクトリをコンパイル対象としたい場合は、複数のディレクトリを束ねる Compilable オブジェクトを作成しそれを渡せば良い。
cljs.build.api/inputs というそのための関数が用意されているので複数ディレクトリを対象とする場合はこれを利用する。