我在使用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。
那么我错过了什么?
答案 0 :(得分:0)
你应该能够这样做:
(cljs.build.api/compile {} "us/quartyard/wat.cljs")