29

この一見ばかげた質問をお詫びしますが、ClojureScriptのオンとオフを数週間試しているので、この1つの簡単な質問を理解できません。

ClojureScriptをデバッグするにはどうすればよいですか?

だからここに問題があります:

  1. *.cjsファイルを作成します
  2. cljsc/buildを実行します...
  3. Webページをロードします。
  4. 何か悪いことが起こります。
  5. Firefoxコンソールを開きます。
  6. 生成されたjsに行がありますが、これは理解できないと思いますが、元のcljsファイルのどの行からのものかわかりません。

私の質問:

ClojureScriptアプリケーションを開発する正しい方法は何ですか?

PS私はClojureScriptOneを見てきました-それについて私が気に入らないのは、それがたくさんのテクノロジーを一度につなぎ合わせるということです。そして、すべてをつなぎ合わせる前に、個々のピースを単独で使用する方法を理解したいと思います。

私はring+mustache + compojureに慣れていますが、[主に標準のClojureデバッグ手法を使用できるため]、ClojureScriptは別の獣です。

更新:この質問が最初に尋ねられて以来、状況はかなり変化しました。最近のClojureScriptアプリケーションをデバッグする適切な方法は、ソースマップを有効にすることです-http: //github.com/clojure/clojurescript/wiki/Source-maps

4

5 に答える 5

26

更新:コンパイラを直接使用するのが簡単になりました。しかし、lein-cljsbuildは依然として非常に便利です。

lein-cljsbuildを使用します。さまざまなビルド(テスト、開発、リリース)を作成できます。ファイルを自動監視して、変更したときにすばやく再コンパイルできるようにすることができます。ブラウザのreplを使用して、ブラウザで直接コードを評価することが簡単にできます。依存関係を管理できます。

特にあなたの質問に関連しています-lein-cljsbuildはまた、賢明な警告のデフォルトをコンパイラに渡すので、ブラウザで実際にコードを実行する前に、詳細で正確な警告を受け取ることができます。

于 2012-06-12T15:18:15.130 に答える
19

更新:元の回答は非常に古く、この回答のマークを外して新しい回答にマークを付けることができないため、自由に元の回答を変更しました。

ClojureScriptをデバッグするには、ソースマップを使用します-https: //clojurescript.org/reference/source-maps

于 2012-06-12T04:25:23.350 に答える
6

最近(2013年10月27日)David Nolenがブログ投稿をリリースし、タイトなフィードバックループの優れたセットアップと、ClojureScriptを使用した優れたデバッグエクスペリエンスを提案しました。

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

「この短い投稿では、ゼロから、ファイルの保存時に即座に再コンパイルされるソースマップされたClojureScriptの開発に進むことができます。」

それもお役に立てば幸いです。

于 2013-10-28T15:35:23.967 に答える
6

Chrome Debuggerを使用する場合は、次を使用できます...

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

(debugger)

これは非常にハックですが、Chromeのデバッグモードがアクティブになります。

ただし、Clojure Scriptは名前空間を使用することを忘れないでください。つまり、変数を作成した場合thing、それmy.namespace.thingはchromeコンソールにあります(予想どおり)。

于 2013-11-29T05:35:56.207 に答える
4

私はpiggiebackを使用していて、brepl(browser repl)をnreplに接続しています。

このようにして、nreplインスタンスでcljsコードをテストして、より迅速なフィードバックを得ることができます。domに変更を加えるnrepl内でいくつかのcljsスクリプトを実行することもできます。変数の状態については、前述のヘンデカゴンのように(js / console.log変数)を使用しています。また、dnolenが指摘しているように、デバッグモード(:optimization:whitespace)でコンパイルすると、生成されたjavascriptが理解しやすくなるため、chromejs環境でブレークポイントを実行します。

[追加:2013-07-18]nrepl-breplをセットアップするための簡単な手順を追加

  1. 以下のチュートリアルを使用してbrepl環境をセットアップします。 https://github.com/magomimmo/modern-cljs/blob/master/doc/tutorial-02.md

    つまり、clojurescriptコードのどこかに以下のスニペットが必要になります。

    (repl/connect "http://localhost:9000/repl")
    
  2. 次に、emacsでnreplを開きます(私はMx nrepl-jack-inを使用しています)

  3. あなたのnreplに以下を入力してください

    (do
     (require 'cljs.repl.browser)
     (cemerick.piggieback/cljs-repl
       :repl-env
       (doto (cljs.repl.browser/repl-env :port 9000)
         cljs.repl/-setup)))
    
  4. cljsがブラウザで実行されているページを表示する必要があります。

  5. nreplで以下を実行して、nreplが正しく機能しているかどうかをテストします。(js / alert "準備ができました!")

于 2013-07-17T07:07:31.067 に答える