如何将环境变量传递给ClojureScript应用程序?

如何将环境变量传递给ClojureScript应用程序?,clojurescript,Clojurescript,我有一个ClojureScript应用程序是从Leiningen启动的。如何在应用程序启动时(可能是构建时)将环境变量传递给应用程序?有两个构建时间选项: 使用宏 CLJS宏是Clojure代码,在编译时运行。所以你可以用 用于读取环境变量的常规Clojure代码,以及 包括他们或做其他宏观的事情 使用goog.define CLJS与Google闭包编译器的这一功能集成,以 通过构建时间 使用两者的示例 相对最小的project.clj,它从 环境变量E1: ;project.clj (de

我有一个ClojureScript应用程序是从Leiningen启动的。如何在应用程序启动时(可能是构建时)将环境变量传递给应用程序?

有两个构建时间选项:

使用宏 CLJS宏是Clojure代码,在编译时运行。所以你可以用 用于读取环境变量的常规Clojure代码,以及 包括他们或做其他宏观的事情

使用
goog.define
CLJS与Google闭包编译器的这一功能集成,以 通过构建时间

使用两者的示例 相对最小的
project.clj
,它从 环境变量
E1

;project.clj
(defproject envvars“0.1.0-SNAPSHOT”
:min lein版本“2.9.1”
:依赖项[[org.clojure/clojure“1.10.1”]
[org.clojure/clojurescript“1.10.597”]]
:插件[[lein cljsbuild“1.1.7”:排除[[org.clojure/clojure]]]
:源路径[“src”]
:cljsbuild{:builds
[{:id“dev”
:源路径[“src”]
:编译器{:closure定义了{envvars.core.e1~(System/getenv“e1”)};XXX
:main envvars.core
:资产路径“js/compiled/out”
:输出到“resources/public/js/compiled/envvars.js”
:输出目录“resources/public/js/compiled/out”
:源映射时间戳true}}]})
宏,它读取env var
E2

;src/envvars/coremacros.clj
(ns envvars.coremacros)
(通过宏[]加载宏
(System/getenv"E2);;XXX
示例“main”,用于打印内容:

;src/envvars/core.cljs
(ns envvars.core)
(:需要宏[envvars.coremacros]))
(启用控制台打印!)
(goog定义e1“未定义”);XXX
(def e2(环境变量coremacros/通过宏加载));XXX
(println e1 e2);XXX
使用以下内容构建:

E1=E1 E2=E2 lein cljsbuild once

请看控制台中打印的
e1e2
,我们还可以使用一个环境处理库,例如

步骤:

  • 包括依赖项,因此:
  • 定义风险值(添加
    :必需
    如果必须)
  • 假设您正在运行shadow cljs应用程序:
export ENV_VAR=&npm安装&npx shadow cljs watch app

您能描述一下这个用例吗?由于ClojureScript在浏览器中运行,因此它与可能要访问env Var的服务器进程不同。我需要将当前git分支配置传递给前端。您好,是否也有方法在运行时传递配置?例如,传递公司名称。应用程序会在a:H1中显示公司名称。然后,我可以为不同的公司使用相同的编译代码
(ns foo
  (:require-macros [adzerk.env :as env]))
(env/def ENV_VAR :required)
export ENV_VAR=<value> && npm install && npx shadow-cljs watch app