我正在关注基座教程,我注意到^shared
代码中的注释,如下所示:
(ns ^:shared tutorial-client.behavior
(:require [clojure.string :as string]
[io.pedestal.app.messages :as msg]))
它有什么用?
^shared 注释用于指示 ClojureScript 编译器编译这个 .clj 文件,它通常会忽略它。这使您可以编写可以在客户端和服务器上运行的共享代码(只要它不使用特定于平台的代码)。这是在 cljx 和 cljc 文件之前,AFAIK 特定于 Pedestal 构建过程,而不是 vanilla ClojureScript 的一部分。
编写平台特定代码的受支持方法是使用读取器条件,这是 Clojure 1.7 中的新功能。
附带说明一下,Pedestal App 已被有效弃用,Pedestal Server 仍在维护中。
它表示代码应该被编译为 clojure 以供服务器端使用,也应编译为 clojurescript 以供在浏览器中使用。
从基座维基:
当编译发生时,任何标记为 :shared 的 Clojure 命名空间也将被编译为 ClojureScript。
(ns ^:shared tutorial-client.behavior (:require [clojure.string :as string] [io.pedestal.app.messages :as msg]))
目前,这些文件必须包含 Clojure 和 ClojureScript 的公共子集。Clojure 1.6 的一个新特性,特征表达式,将允许我们摆脱这个限制。