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 源文件生成一个单独的源代码映射文件。

需要注意的是,在使用除 :none 之外的 :optimizations 设置时,有一些源代码映射选项限制。在这些情况下,: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"}

生成的 sourceMapURL 将是:main.js.map

Web 服务器集成

所有源文件将被复制到 :output-dir 中,以便可以解析它们,但这在您有 Web 服务器的情况下并不有用。:source-map-path 可用于定义任意路径前缀。因此,与其让源代码映射文件引用解析为类似 resources/public/js/out 的内容,不如指定 :source-map-path "js/out"