garden icon indicating copy to clipboard operation
garden copied to clipboard

Compiling Garden from CLJS files

Open kgxsz opened this issue 7 years ago • 3 comments

Hi,

I'm currently using Garden and am playing around with co-locating Garden style in the same file as the Reagent component that will use that style.

I have a cljc file containing my main style which requires the cljs file containing the Garden style. I use lein-garden to compile the CSS, but obviously the compiler fails to pull in the cljs file.

I don't know how keen I am on moving my entire cljs tree into cljc, esp. since I'll need to prefix a tonne of stuff with #?(:cljs ... to satisfy the compiler.

Any suggestions on how to approach this would be very appreciated.

Thank you!

kgxsz avatar Sep 18 '16 11:09 kgxsz

Currently we are using the following trick:

;;; my-project/stylesheet.cljs
(ns my-project.stylesheet
  (:require [cljs.nodejs :as nodejs] [garden.core :as garden))

(nodejs/enable-util-print!)

(defn -main [& args]
  (println (garden/css ['styles])))

(set! *main-cli-fn* -main)

Then in cljsbuild of project.clj

{:id "css"
                        :source-paths ["src"]
                        :compiler {:main my-project.stylesheet
                                   :output-to "resources/public/js/server-side/css.js"
                                   :output-dir "resources/public/js/server-side/"
                                   :target :nodejs
                                   :optimizations :none}}

And finally in scripts of package.json

    "build-css": "lein cljsbuild once css && mkdir -p resources/public/css && npm run css > resources/public/css/app.css",
    "css": "node resources/public/js/server-side/css.js",

So when I want to build styles for production I just run npm run build-css

For development I've simpy add (garden/css) ouput to the inlined style tag in the html body because reagent+figwheel will reload it much faster then lein-garden+figwheel/css.

TatriX avatar Nov 28 '16 16:11 TatriX

@TatriX that's a pretty nice trick thanks for sharing.

Would supporting the :output-to flag for NodeJS be helpful here? I think that's doable.

noprompt avatar Dec 02 '16 07:12 noprompt

Sure, if I still can keep all my styles in cljs files it would be perfect.

TatriX avatar Dec 02 '16 08:12 TatriX