如何调试ClojureScript

use*_*359 28 clojure clojurescript

我为这个看似愚蠢的问题道歉,但我现在已经开始使用ClojureScript几周了,我无法弄清楚这个简单的问题:

我如何调试ClojureScript?

所以这是问题所在:

  1. 我写了*.cjs文件
  2. 我运行cljsc/build ...
  3. 我加载了我的网页.
  4. 发生了一件坏事.
  5. 我打开了firefox控制台.
  6. 我在生成的 js中得到一行,我发现这是不可理解的,我不知道它来自哪个原始cljs文件行.

我的问题:

开发ClojureScript应用程序的正确方法是什么?

PS我看过ClojureScriptOne - 我不喜欢的是它将所有技术同时捆绑在一起; 而且我更愿意在将它们连在一起之前了解如何单独使用每个单独的部分.

我对ring + mustache + compojure很满意,[主要是因为我可以使用我的标准Clojure调试技术]但是ClojureScript是另一个野兽.

更新:自从第一次提出这个问题以来,情况发生了很大的变化.这些天调试ClojureScript应用程序的正确方法是启用源映射 - http://github.com/clojure/clojurescript/wiki/Source-maps

dno*_*len 26

更新:直接使用编译器现在很简单.但lein-cljsbuild仍然非常有用.

使用lein-cljsbuild.您可以编写不同的构建(测试,开发,发布).您可以自动监视文件,以便在更改文件时快速重新编译.您可以轻松使用浏览器repl直接在浏览器中评估代码.您可以管理依赖项.

与您的问题特别相关 - lein-cljsbuild还将合理的警告默认值传递给编译器,以便在实际运行浏览器中的代码之前获得详细且准确的警告.


Hen*_*gon 18

更新:我已经冒昧地改变原来的答案,因为它已经过时了,我无法取消标记这个答案并标记一个新的答案.

调试ClojureScript使用源映射 - http://github.com/clojure/clojurescript/wiki/Source-maps


leo*_*bot 6

最近(2013年10月27日)David Nolen发布了一篇博文,建议使用ClojureScript进行严密的反馈循环和良好的调试体验.

http://swannodette.github.io/2013/10/27/the-essence-of-clojurescript/

"这篇简短的帖子将让你从零开始,在文件保存中通过即时重新编译来开发源映射的ClojureScript."

希望这也可以帮助.


Sha*_*ron 6

ClojureScript调试最佳实践(示例项目和教程):

https://github.com/shaunlebron/How-To-Debug-CLJS

生态系统仍然处于不稳定状态,所以我希望通过社区意见更新这一点,以便为新手提供便利.它目前有四种传统的调试方法:

  • 记录 - 轻松描述性地记录您的应用程序状态
  • 测试 - 无需打开Web浏览器即可快速测试代码
  • 交互 - 在您的网页上运行时使用您的代码
  • 跟踪 - 暂停和逐步执行代码


fil*_*m42 5

如果您想使用Chrome调试器,可以使用以下内容...

(defn debugger []
  (js/eval "debugger"))

(debugger)
Run Code Online (Sandbox Code Playgroud)

这是一个非常黑客,但它将激活chrome的调试模式.

但请记住,Clojure脚本使用命名空间,这意味着如果您创建了一些变量thing,那么它将my.namespace.thing在chrome控制台中找到(如预期的那样).