24

プロジェクトに ClojureScript を使用しようとしています。幸せな開発者になるためには、迅速なフィードバック ループが必要です。コードを書いて、できるだけ早く確認してください。また、現在のページのコンテキストで REPL を使用したいと考えています。

私が使用lein-cljsbuildしている問題から、適切にセットアップできなかったと思います。

まず第一に、「JWM ウォームアップ」後でも、小さなファイルのコンパイル時間は長すぎます:optimizations :simple:

Compiling "resources/public/js/cljs.js" from ["src-cljs"]...
Successfully compiled "resources/public/js/cljs.js" in 8.233018 seconds.
Compiling "resources/public/js/cljs.js" from ["src-cljs"]...
Successfully compiled "resources/public/js/cljs.js" in 5.522989 seconds.
Compiling "resources/public/js/cljs.js" from ["src-cljs"]...
Successfully compiled "resources/public/js/cljs.js" in 8.144354 seconds.

第二に、時々私はこのようなものを手に入れます:

Compiling "resources/public/js/cljs.js" from ["src-cljs"]...
Compiling "resources/public/js/cljs.js" failed.
Exception in thread "main" java.lang.NullPointerException
at java.util.regex.Matcher.getTextLength(Matcher.java:1140)
at java.util.regex.Matcher.reset(Matcher.java:291)
at java.util.regex.Matcher.<init>(Matcher.java:211)
at java.util.regex.Pattern.matcher(Pattern.java:888)
at clj_stacktrace.utils$re_gsub.invoke(utils.clj:6)

# ... many similar useless lines

at clojure.lang.Var.applyTo(Var.java:532)
at clojure.main.main(main.java:37)

これらのスタック トレース (実験から理解したように、ほとんどの場合、構文エラーに関連しています) は役に立たないよりも悪いです: エラーに関する手がかりを提供しないだけでなく、自動再コンパイルも停止します。そのようなスタックトレースごとに、次のことを行う必要があります。

  • 私が「パーサーのふりをする」と呼んでいるテクニックを使用して、何が問題なのかを突き止めてください。これが Lisp であることを神に感謝します。私がすべき唯一のことは、対応する括弧を注意深く数えることです。
  • が実行Cmd-Cされるシェルを押し込みますlein cljsbuild auto
  • lein cljsbuild auto再実行
  • ファイルに改行を挿入するなどの無駄な変更を加えて、新しいビルドをトリガーします
  • JVM は再度「ウォームアップ」する必要があるため、ファイルが再度コンパイルされるまで 30 秒ほど待ちます。
  • 多くの場合、この時点で別のスタックトレースを取得します。それを取得した後、泡立て、すすぎ、すべての忌まわしい手順を繰り返す必要があります

私が理解できなかった3番目のことはREPLです。rlwrap lein trampoline cljsbuild repl-listenインターウェブから、現在のページに接続する方法を学びました。ただし、コンソールのすべてのリロード、ナビゲーション、および構文エラー (矢印キーを使用して押すのを忘れてはいけませんrlwrap) により、REPL が完全に動かなくなります。私はそれを再起動し(〜10秒)、その後ページをリロードしてから、フレンドリーな環境でもう一度試してみる必要があります.

おそらく誰かがそれをすべて理解し、機能するワークフローを持っていると思います。私は失敗したソフトウェアエンジニアのように感じているので、最初からすべてをセットアップするのを手伝ってください.

4

5 に答える 5

5

私にとって、 Catnipは現時点で ClojureScript に最高の開発エクスペリエンスを提供します。

于 2013-01-27T23:06:19.690 に答える
3

フィグホイールをチェック!ステロイドのライブリロードのようなものです。
clojurescript とフロントエンド開発での作業は、これほど楽しいものではありませんでした!
自分の目で確かめてください(デモは少し古くなっています – 今はさらに良くなっています!)
ファイルが変更されたときにページをリロードするだけでなく、Bret Victor が話していたインタラクティブなプログラミングを提供します(もしあなたが' t)

于 2015-01-22T23:16:06.433 に答える
2

私は Emacs 内でこのツールhttps://github.com/cemerick/austinを試してみましたが、彼のデモとスクリーンキャストでわかるように非常にうまく機能します。

良い発展を

于 2013-10-16T10:25:11.263 に答える
0

小さなファイルのコンパイル時間が長すぎる

試してみてください:optimizations :whitespace。そして使うlein cljsbuild auto

第二に、時々私はこのようなものを手に入れます:......

私は前にこの問題に会ったことがありません。cljsbuild のバグのようです。おそらく別のバージョンを変更してみてください。で使用[lein-cljsbuild "1.0.2"]してい[org.clojure/clojurescript "0.0-2156"]ます。私の1.0.3セットアップでは動作しません。

私が理解できなかった3番目のことはREPLです

あなたの場合、重要なポイントは、 REPL を再起動したり page をリロードしたりせずに名前空間をリロードする方法を見つけることです。

load-file私はこれが良いと思います。

私のワークフローは次のとおりです。

  1. 最初に REPL を開始します。rlwrap lein trampoline cljsbuild repl-listen
  2. (repl/connect "http://localhost:9000/repl")私のコードにあることを確認してください。
  3. マイページをブラウザで開きます。
  4. いくつかのテストを行います(my-namespace/my-func a b c)
  5. コードを編集します。
  6. 私のREPLで、実行します(load-file "path-to-my-file.cljs")
  7. 繰り返す4

これはまだかなり面倒なワークフローです。load-file遅くて壊れやすいので、ブラウザでテストすることがあります。誰かがより良い答えを提供できることを願っています。

于 2014-09-25T16:40:44.580 に答える