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}}]})

編譯後,您可以接著在 Chrome 中開啟一個連結到生成的 js 檔案的 HTML 檔案。請確保已透過Chrome 開發人員工具設定啟用 Chrome 中的原始碼對應。

原始碼對應也適用於將 :optimizations 設定為 :none 的情況。在這種情況下,:source-map 的值不會控制檔案名稱。只要該值為真值(參見上面的 leiningen 範例),就會為每個 ClojureScript 原始碼檔案產生一個單獨的原始碼對應檔案。

重要的是要注意,當使用 :optimizations 設定為非 :none 的其他值時,存在一些原始碼對應選項的限制。在這些情況下,:output-to:output-dir:source-map 必須都共享完全相同的父目錄。產生的 JavaScript 檔案 (:output-to) 將在末尾包含一行,將其連結到其原始碼對應,如下所示

//# sourceMapping=<sourceMapURL>

sourceMapURL:source-map 路徑,相對於 :output-to,因為這是瀏覽器之後將如何解析它的方式。例如,當給定

{: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"}

產生的 sourceMapURL 將是:main.js.map

網頁伺服器整合

所有原始碼檔案都將被複製到 :output-dir 中,以便它們可以被解析,但是當您擁有網頁伺服器時,這並不是很有用。可以使用 :source-map-path 來定義任意路徑前綴。因此,您可以指定 :source-map-path "js/out",而不是將原始碼對應檔案參考解析為類似 resources/public/js/out 的路徑。