我正在用lumo编写一个cli脚本,我想要以下宏,但是使用来自nodejs的readFileSync
。
(defmacro compile-time-slurp [path]
;; slurp is not defined in self hosted cljs
(slurp path))
这可能吗?
编辑:为了更清楚,这是在自托管的clojurescript中,slurp
函数在宏扩展时不可用。
答案 0 :(得分:4)
ClojureScript宏是用Clojure语言编写的,大概有这个生命周期:
这省略了在ClojureScript编译器的其余部分(大部分)中完成的所有部分,因此我们可以专注于ClojureScript宏只能访问可从JVM而非节点获得的Clojure部分的事实在运行时,该宏返回的表单将成为已完成的ClojureScript程序的一部分,可以访问节点API,例如readFileSync。
简而言之,您的宏应该返回对readFileSync的调用,而不是在宏运行时执行文件读取。如果您的代码在评估宏时确实需要读取一些文件,因为例如它们包含要输出的代码或其他东西,那么您需要使用Clojure表单来读取这些文件,例如调用/super-shiny-cars/volvo-x90
你以上。