Переменные окружения Figwheel
Я понимаю, что 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
}
И затем в моем коде cljs я хотел бы получить доступ к ним как-то. Если это имеет значение, я запускаю проект Reagent.
2 ответа
Один из способов сделать это через closure-defines
,
Например в вашем project.clj
:
:cljsbuild { ; ...
:builds [{:id "min"
;;; XXX: map with your values
:compiler {:closure-defines {"example.core.version" ~version}
; ...
version
это определение в моем проекте здесь. Таким образом, вы можете настроить это для чтения env-var и т. Д.
(def version
(->
(clojure.java.shell/sh "git" "describe" "--always")
:out
clojure.string/trim))
Тогда в вашем example.core
нс:
(goog-define version "dev")
А затем использовать его как обычный def
вещь
Я предполагаю, что вы уже прочитали все о профилях lein. Если вы еще этого не видели, обязательно посмотрите Dynamic Eval в lein:
{:user {:compile-path #=(eval (System/getenv "ci.compile-path" )),
:target-path #=(eval (System/getenv "ci.target-path" )) }}
Затем вы можете использовать динамически читаемую информацию, чтобы установить другой :main
или другой :source-paths
тянуть код с разными константами.
Конечно, не забудьте просмотреть все параметры компилятора.