As the author of shadow-build [1] and shadow [2] I'm obviously a bit biased on what to use on the CLJS side of things so I'll skip that part.
As for CSS and other "static" assets (images, fonts, ...) I found it is best to make it a build/compile step and deploy it seperately from the application. Many tools in other languages or even Clojure aim to make it part of the request/response cycle via "middleware" (ring, rack, etc). I found this to be absolutely unacceptable when the apps reach a certain point since it gets quite common to release a new "client" build (cljs, css, ...) without touching/restarting the server which is required if you ship everything in a jar. That requires a seperate server for static files but that is my normal setup anyways. (nginx -> varnish -> clojure) As for the tools used: - SASS/SCSS via ruby gem - thor gem (also ruby, clojure startup is too slow) for versioning/packaging - capistrano (also ruby) to build/deploy remote - custom file watcher to invoke the shell commands (clojure) That stack is still completely ruby based since "it works" and has seen quite a lot more work and use than their clojure counterparts (if they exist). I don't have any tips on what to avoid since I haven't tried anything "new" for quite some time, apart from the CLJS bits of course which I had very specific requirements that weren't met anywhere else. ;) HTH, /thomas PS: @mike: shadow-build can definitely help with multiple targets, happy to help if you have questions. [1] https://github.com/thheller/shadow-build [2] https://github.com/thheller/shadow On Sunday, October 19, 2014 9:29:01 PM UTC+2, Colin Yates wrote: > Any advice for a newbie about to embark on a new non-trivial SPA using cljs, > om and (om-)bootstrap. > > I am not a newbie in terms of CSS, JS (coffeescript for the win!) or Clojure > (despite the evidence :)). > > The app itself will live on an internal LAN with a small number of clients, > heavyish logic but low load. It will be heavily influenced by CQRS and event > sourcing, with the server transmitting "domain events since you last checked > in" to the client. > > In particular, what do you wish you had done differently, specifically in > regard to: > - using JS from cljs (which unfortunately still makes my eyes bleed :)) > - integrating 3rd party components (e.g. jquery ui) with om > - unit testing (previously used midge work but I think I will stick with > core.test with the humane plugin) > - cross browser javascript (I assume the google closure library helps here) > - hooking up a browser to the REPL (IE8 unfortunately!) > - web sockets/polling (again IE8) > > I am close to finalising on (but counter-arguments welcome!): > - Cursive clojure (falling back to emacs if necessary - so far it isn't) > - lein-cljsbuild > - garden for CSS (but happy to hear stories around asset management) > - core.typed > - core.test or midje > - transmit for encoding data > > (I have had a look at luminus and it seems great. However, I "get" om > architecturally more than reagent and I have already settled on a number of > other libraries. I have also looked at pedestal but it needs to be deployed > on Windows which they don't support.) > > Anything you wish somebody had told you before you started? > > Thanks a bunch! -- Note that posts from new members are moderated - please be patient with your first post. --- You received this message because you are subscribed to the Google Groups "ClojureScript" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/clojurescript.
