使用cljs API

时间:2018-01-21 04:27:52

标签: clojure clojurescript

我在使用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"))))

发出一行js打印“ok”,但我的文件没有。

同时,

(with-core-cljs nil (fn []
                        (analyze-file "us/quartyard/wat.cljs")
                        (find-ns 'us.quartyard.wat)))

返回nil,而不是命名空间的AST。

那么我错过了什么?

1 个答案:

答案 0 :(得分:0)

你应该能够这样做:

(cljs.build.api/compile {} "us/quartyard/wat.cljs")