複数のソースディレクトリに含まれる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
というそのための関数が用意されているので複数ディレクトリを対象とする場合はこれを利用する。