如何在 ClojureScript 错误消息中找到我自己的函数?

How to find my own functions in a ClojureScript error message?

我是 ClojureScript 的新用户,我正在使用 Re-frame 编写应用程序。当我收到错误消息(来自 ClojureScript)时,在大多数情况下,我会从库中获得以 JavaScript 代码结尾的调用堆栈。这是预料之中的,但我没有从堆栈中自己的代码中获得函数!有时,我根本没有收到任何 ClojureScript 函数调用,只有 JavaScript。有没有办法在这些错误消息中查看堆栈的顶部?或者要在堆栈中查看我的 code/namespace 中的最后一个函数?

这对我来说可能是一个巨大的帮助。即使是很小的错误(例如,在地图调用中交换操作员的位置)也很难跟踪。我应该做错了什么。

据说 ClojureScript 错误消息是后天习得的。由于编译器的工作方式,错误消息可能是含糊不清的。

安装 cljs-devtools or the fork Dirac 有助于使 ClojureScript 错误消息更具可读性。这其中包括:

  1. :hints 功能。

    The :hints feature is an attempt to augment uncaught exceptions and error object to include a bit of additional knowledge related to such errors. It tries to fetch the original source file, extract relevant part to show you more context and mark the javascript error there. This is expected to work only with :optimizations none compiler mode and it is disabled by default because it relies on monkey patching.

  2. 更好地显示 ClojureScript function names

    更好的堆栈跟踪示例(来自 Dirac,但 cljs-webtools 已经改进了很多)

安装

  • 启用自定义格式化程序
  • 使用 CMD-ALT-J
  • 打开 DevTools
  • 使用 F1 或按三个点
  • 进入设置
  • 在控制台下勾选"Enable custom formatters"

cljs-webtools

(见Installation):

  • project.clj

    中添加编译器配置
    {:builds
       [{:id           "dev"
         :source-paths ["src/cljs"]
         :figwheel     {:on-jsload "blabla.core/reload"}
         :compiler     {(...)
                        :preloads        [devtools.preload]
                        :external-config {:devtools/config {:features-to-install :all}}}}
    

狄拉克

  • 安装 Dirac Chrome extension.
  • 运行 Chrome 启用远程调试。

    /Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary \
      --remote-debugging-port=9222 \
      --no-first-run \
      --user-data-dir=$A_PATH_TO_YOUR_USER_PROFILE_DIRECTORY
    
  • binaryage/dirac 添加到 project.clj

    中的依赖项
    :dependencies [[binaryage/dirac "RELEASE"]]
    

    (或使用另一个installation instructions)。

如果您使用 re-frame Leiningen template,则默认包含 cljs-devtools