【问题标题】:Compiling a cljs file to a javascript string using the cljs API使用 cljs API 将 cljs 文件编译为 javascript 字符串
【发布时间】: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


【解决方案1】:

你应该可以这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    相关资源
    最近更新 更多