configuron
Clojure(Script) envion compatible config that reloads from project.clj
when in dev mode.
Usage
Clojure
- Add
:mode
keys for each of your profiles inproject.clj
{:profiles {:dev {:env {:mode :dev}}
:uberjar {:env {:mode :prod}}}}
- Access your config through
rocks.clj.configuron.core/env
instead ofenviron.core/env
.
ClojureScript
You can use your config on client-side as well.
Simply add GET route /environ
to your project with handler rocks.clj.configuron.core/config-handler
:
(GET "/environ" [] #'config-handler)
By default your client-side config will be empty.
To add some data you should add paths to :client-config-keys
.
For example given your profiles look like this.
{:profiles {:dev {:env {:mode :dev
:debug-info {:tokens {:sentry ""}}
:client-config-keys [[:mode]
[:debug-info :tokens]]}}
:uberjar {:env {:mode :uberjar
:client-config-keys [[:mode]]}}}}
/environ
ring handler will return.
In dev:
{:mode :dev
:debug-info {:tokens {:sentry ""}}}
In prod:
{:mode :dev}
You can access your config on client side as usual through rocks.clj.configuron.core/env
or dynamically by executing http request to /environ
.
Caution
When accessing rocks.clj.configuron.core/env
on page load (for example cljs app entry point),
there is no guarantee that config has been received by that time.
There are two solutions for that.
- Wrap your code in go block
(go
(let [env (or (<! rocks.clj.configuron.core/fetcher)
rocks.clj.configuron.core/env)]
;; your web-app initialization goes here
))
or (preferably)
- Write your config into dom on server side.
This will also effectively avoid http request to
/environ
.
Example in html:
<body>
<div id="config" transit="your config goes here" />
</body>
Example in hiccup:
[:body
[:div#config {:transit (rocks.clj.configuron.core/get-client-config)}]]
License
Copyright © 2018 Eduard Knyshov
Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.