def 的 Clojurescript 自编译

Clojurescript Self Compile of def

Clojurescript 1.7 现在支持自编译(参见 here)。我可以编译代码如下

(ns self-compile.core
  (:require cljs.js))

(enable-console-print!)
(set! cljs.js/*eval-fn* cljs.js/js-eval)
(def state (cljs.js/empty-state))

(cljs.js/eval-str state "(+ 1 2)"
                (fn [response] ...))

这对大多数代码都适用,除了 (def a 3) 会给出错误 #error {:message "ERROR", :data {:tag :cljs/analysis-error}, :cause #object[TypeError TypeError: Cannot set property 'a' of undefined]}.

如何修复设置?

我遇到了同样的问题,这里有一些我必须做的事情才能让它正常工作:

  1. 将选项传递给 eval-str,您可能必须传递如下选项:

    :context :expr
    :def-emits-var true
    :ns 'cljs.user
    
  2. 先尝试评估 (ns cljs.user),然后再评估 def

应该可以解决问题。

https://github.com/cljsinfo/cljs-api-docs/blob/catalog/refs/cljs.js_eval-str.md