Clojure Figwheel环境变量

Clojure Figwheel环境变量,clojure,clojurescript,reagent,figwheel,Clojure,Clojurescript,Reagent,Figwheel,我知道Figwheel允许我指定不同的构建。(也许另一种看待它们的方式是环境?) 基于构建/环境,我可能需要在代码中使用不同的行为。例如,在dev中,我连接到某个API端点,而在prod中,它是另一个端点。理想情况下,我希望能够以某种方式(可能这属于project.clj)指定特定于环境的变量,然后在我的cljs代码中访问它们 有这样做的机制吗 我在想象这样的事情: :cljsbuild { :builds [{:id "dev" :source-paths

我知道Figwheel允许我指定不同的构建。(也许另一种看待它们的方式是环境?)

基于构建/环境,我可能需要在代码中使用不同的行为。例如,在dev中,我连接到某个API端点,而在prod中,它是另一个端点。理想情况下,我希望能够以某种方式(可能这属于project.clj)指定特定于环境的变量,然后在我的cljs代码中访问它们

有这样做的机制吗

我在想象这样的事情:

:cljsbuild {
    :builds [{:id "dev"
              :source-paths ["src"]
              :figwheel true
              :env-variables {foo "bar"
                              bar "foo"} ; <-------
              :compiler {:main hello-seymore.core 
                         :asset-path "cljs/out"
                         :output-to  "resources/public/cljs/main.js"
                         :output-dir "resources/public/cljs/out"} 
             }
             {:id "prod"
              :env-variables {foo "different value for foo"
                              bar "different value for bar"}}] ; <-------
              ; etc
   }
:cljsbuild{
:builds[{:id“dev”
:源路径[“src”]
:figwheel true
:env变量{foo“bar”
bar“foo”};一种方法是通过

例如,在您的
项目中.clj

version
是我的项目中的一个def。因此,您可以将其调整为读取环境变量等。

然后在您的
示例中.core
ns:


然后像普通的
def
-ed一样使用它。

我想你已经读过了。如果你还没有看到它,一定要在lein中查看:

然后,您可以使用动态读取信息设置不同的
:main
,或设置不同的
:源路径
,以拉入具有不同常量的代码


当然,别忘了检查所有的。

另一个选项可能是宏。因为它们是clojure代码,在您构建时运行,它们应该能够从您的构建环境中获取内容。我对以后如何访问它感到困惑。如果在
:编译器中我将
:closure defines
设置为
{my project.core.foo”“bar}
,如何在我的项目中访问
foo
?@weltschmerz add
(很好地定义foo“一些默认值”)
在您的
我的项目.core
中,还请注意,虽然宏可以使用环境变量并相应地生成代码,但
:closure defines
更可取,因为这样会生成缓存友好的代码。例如,请参阅中的宏讨论
:cljsbuild { ; ...
            :builds [{:id "min"
                      ;;; XXX: map with your values
                      :compiler {:closure-defines {"example.core.version" ~version}
                                 ; ...
(def version
  (->
    (clojure.java.shell/sh "git" "describe" "--always")
    :out
    clojure.string/trim))
(goog-define version "dev")
{:user {:compile-path  #=(eval (System/getenv "ci.compile-path" )),
        :target-path   #=(eval (System/getenv "ci.target-path"  )) }}