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