ClojureScript

ソースマップ

ClojureScriptは現在、HTMLソースマップをサポートしているため、:source-map構成オプションを使用して、ブラウザで直接ClojureScriptをデバッグできます。

:source-mapには、ブール値を指定するか、最適化が有効になっている場合は、マップのファイルへのパスを指定できます。

ここに記載されているbin/cljscスクリプトを使用すると、プロジェクトに合わせて調整した次のコマンドラインで実行できます。

 $ cljsc src '{:optimizations :whitespace :output-dir "out" :output-to "main.js" :source-map "main.js.map"}'

Leiningenを使用してビルドしている場合、project.cljの同様のセクションは次のようになります。

 :cljsbuild {
    :builds [{:id "main"
              :source-paths ["src"]
              :compiler {
                :output-to "main.js"
                :output-dir "out"
                :optimizations :none
                :source-map true}}]})

コンパイル後、生成されたjsファイルにリンクするHTMLファイルを開きます。Chromeでソースマップが有効になっていることを確認してください。Chromeデベロッパーツール設定

ソースマップは、:optimizations:noneに設定されている場合にも機能します。この場合、:source-map値はファイル名を制御しません。値が真偽値であれば(上記のLeiningenの例を参照)、ClojureScriptソースファイルごとに個々のソースマップファイルが生成されます。

:optimizations設定が:none以外の場合、ソースマップオプションにいくつかの制限があることに注意することが重要です。これらの場合、:output-to:output-dir、および:source-mapはすべて、まったく同じ親ディレクトリを共有する必要があります。生成されたJavaScriptファイル(:output-to)には、ソースマップへのリンクが最後に追加されます。

//# sourceMapping=<sourceMapURL>

sourceMapURLは、ブラウザが解決する方法であるため、:output-toを基準とした:source-mapパスです。たとえば、次のように指定した場合

{:output-to "resources/public/js/compiled/main.js"
 :output-dir "resources/public/js/compiled"
 :optimizations :simple
 :source-map "resources/public/js/compiled/main.js.map"}

結果のsourceMapURLmain.js.mapになります。

Webサーバーとの統合

すべてのソースファイルは:output-dirにコピーされるため解決できますが、Webサーバーを使用している場合はこれは役に立ちません。:source-map-pathを使用して、任意のパスプレフィックスを定義できます。そのため、ソースマップファイルへの参照がresources/public/js/outのようではなく、代わりに:source-map-path "js/out"を指定できます。