我有一个从Leiningen启动的ClojureScript应用程序。如何在启动时将env变量传递给应用程序(可能是当它生成时)
有两个构建时间选项:
CLJS宏是Clojure代码,在编译时运行。所以你可以使用常规的Clojure代码读取环境变量,或者包括它们或执行其他宏操作。
goog.define
CLJS与Google Closure编译器的此功能集成在一起,通过构建时间configurations。
相对最小project.clj
,从env-var goog.define
:
E1
宏,读取env-var ; project.clj
(defproject envvars "0.1.0-SNAPSHOT"
:min-lein-version "2.9.1"
:dependencies [[org.clojure/clojure "1.10.1"]
[org.clojure/clojurescript "1.10.597"]]
:plugins [[lein-cljsbuild "1.1.7" :exclusions [[org.clojure/clojure]]]]
:source-paths ["src"]
:cljsbuild {:builds
[{:id "dev"
:source-paths ["src"]
:compiler {:closure-defines {envvars.core.e1 ~(System/getenv "E1")} ; XXX
:main envvars.core
:asset-path "js/compiled/out"
:output-to "resources/public/js/compiled/envvars.js"
:output-dir "resources/public/js/compiled/out"
:source-map-timestamp true}}]})
:
E2
示例“主”,以打印内容:
; src/envvars/coremacros.clj
(ns envvars.coremacros)
(defmacro load-via-macro []
(System/getenv "E2")) ; XXX
构建方式:
; src/envvars/core.cljs
(ns envvars.core
(:require-macros [envvars.coremacros]))
(enable-console-print!)
(goog-define e1 "undefined") ; XXX
(def e2 (envvars.coremacros/load-via-macro)) ; XXX
(println e1 e2) ; XXX
看控制台中正在打印E1=E1 E2=E2 lein cljsbuild once