簡體   English   中英

Figwheel環境變量

[英]Figwheel environment variables

我知道Figwheel允許我指定不同的版本。 (也許將它們視為環境的另一種方式?)

基於構建/環境,我的代碼中可能會要求其他行為。 例如,在開發人員中,我連接到某個API端點,而在生產中,它是一個不同的端點。 理想情況下,我希望以某種方式(大概屬於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項目。

一種方法是通過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 ns中:

(goog-define version "dev")

然后用它像一個普通的def -ed的事情。

我假設您已經閱讀了有關lein配置文件的所有內容。 如果尚未看到,請確保在lein中查看Dynamic Eval

{:user {:compile-path  #=(eval (System/getenv "ci.compile-path" )),
        :target-path   #=(eval (System/getenv "ci.target-path"  )) }}

然后,您可以使用動態讀取的信息來設置不同的:main或不同的:source-paths以引入具有不同常量的代碼。

當然,不要忘記查看所有編譯器選項

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM