如何将 clojurescript 集成到现有 javascript 代码库?

How to integrate clojurescript to existing javascript code base?

我正在使用试剂在 clojurescript 中编写插件功能。 我想在现有的 React、Flux 应用程序中使用它。

我应该如何将两者联系起来?

由于 ClojureScript 编译器生成 JavaScript 代码,集成应该非常简单。只需将 ^:export 注释添加到您想要从 JavaScript 代码访问的任何 ClojureScript 定义中即可。

; ClojureScript
(ns my-namespace.core)

(defn ^:export my-identity [x] x)
// call from JavaScript
my_namespace.core.my_identity(5); // Notice how "-" is replaced with "_"

如果您想从 ClojureScript 代码中引用 JavaScript functions/variables,只需在全局名称前加上 js/.

; Calling global JavaScript function from ClojureScript
(js/alert "Hello!")

查看此 blog post on ClojureScript/JavaScript interop 以获取更多示例。

ClojureScript Cheatsheet 上的 JavaScript Interop 部分也是一个很好的参考。例如,它记录了 clj->jsjs->clj 函数,您需要使用它们在 Clojure 风格的对象(关键字、向量、映射)和 JavaScript 风格的对象(字符串)之间进行转换, 数组, maps/objects).