ブラウザがclojurescriptreplに接続されると、以前はreplからマクロを呼び出す方法がありませんでした。これは、過去にclojurescriptを延期し、javascriptを直接使用することを好む問題です。基本的に、cljs-replはちょっと足りないと感じ、clojureでコードを書くことで解放されるはずだったコンパイル/デバッグサイクルに戻りました。
clojurescriptでコードをプッシュおよびテストするための適切な回避策/ワークフローはありますか?特にマクロを評価できるのなら?
私の問題の例は次のとおりです。
新しいcljsプロジェクトを作成します
lein new cljs-template blah
サーバーを起動します
cd blah
ラインラン
web-replを実行します
leinトランポリンcljsbuildrepl-listen
src/blah/client/main.cljs
見出しのあるファイルがあります
(ns blad.client.main (:require [noir.cljs.client.watcher:as watcher] [clojure.browser.repl:as repl] [crate.core:as crate]) (:use [jayq.core:only [$ append]]) (:use-macros [crate.macros:only [defpartial]]))
行に注意してください(:use-macros [crate.macros :only [defpartial]])
defpartial
マクロなのでブラウザreplでは使えません。私が得るエラーは次のとおりです。
>>(crate.macros / defpartial []) "エラー評価:"(crate.macros / defpartial []):as "crate.macros.defpartial.call(null、cljs.core.Vector.fromArray([])); \ n" # TypeError:未定義のプロパティ'defpartial'を読み取ることができません
現在、defpartialは非常に便利なマクロであり、それがなければ面倒でした。
プロジェクトで。を使用して別のマクロを定義したい場合、問題はさらに悪化しました:use-macros
。replまたはブラウザーで書き込んだ内容をデバッグできず、約半日後、clj replを使用し、macroexpandを使用してそこでマクロをテストし、結果をコピーして戻す方が速いことがわかりました。ブラウザの担当者 約1日後に1つのcljsマクロが機能するようになりましたが、あまり面白くありませんでした。これは約6ヶ月前のことです。私は今これを行うためのより速い方法があることを望んでいます。