【发布时间】:2018-01-21 04:27:51
【问题描述】:
我在使用 cljs API 时有些吃力。我有一个.cljs 文件,其中包含我的类路径上的一系列表单,并且想要获取相应的 javascript 作为字符串,而无需写入任何类型的文件系统。我可以通过分析器得到它,但不知道如何得到发出的 javascript:
(with-core-cljs nil (fn []
(analyze-file "us/quartyard/wat.cljs")
(println(all-ns)) ;; prints essentially what I expect.
(now what???)))
我已阅读文档,但在analyze-file 之后调用什么并不明显。
编辑(添加更多信息):
有一个函数cljs.compiler.api/emit 在给定一个 AST 节点的情况下返回一些 js。但我发现获得 AST 节点的唯一方法是调用 (analyze form) 其中 form 是单个 cljs 形式。
要分析定义具有多种形式的命名空间的完整文件,唯一明显的方法是使用调用 analyze-file,它不返回任何内容并将命名空间的 AST 添加到环境编译器状态。但目前尚不清楚如何恢复该 AST。
例如:
(with-core-cljs nil (fn []
(analyze-file "us/quartyard/wat.cljs")
(emit (analyze (empty-env) '(println "ok"))))
发出一行打印“ok”的 js,但我的文件中没有任何内容。
同时,
(with-core-cljs nil (fn []
(analyze-file "us/quartyard/wat.cljs")
(find-ns 'us.quartyard.wat)))
返回 nil,而不是我的命名空间的 AST。
那么我错过了什么?
【问题讨论】:
-
试试
(cljs.compiler.api/emit) -
@ClojureMostly:这是我的第一个想法,但我不知道如何让它发挥作用。我为我的问题添加了额外的上下文/解释。
标签: clojure clojurescript