shadow-cljs is a ClojureScript compiler which friendly to JavaScript developers.
By default, ClojureScript code is compiled to JavaScript in Google Closure Compiler modules, which uses namespaces to manage files(or modules). However, nowadays the JavaScript community has changed a lot since the year Google Closure Compiler was born. We used CommonJS and will use ES6 modules for numerous JavaScript modules on npm.
Meanwhile, in order to reuse our knowledge from Webpack, the shortest path is to compile ClojureScript to CommonJS or ES6 code that Webpack consumes. And shadow-cljs can do it.
To install shadow-cljs, you need to Node.js installed, then you can use npm. Say we are using macOS:
brew install nodejs
npm install -g shadow-cljs
To run shadow-cljs, a configuration file called shadow-cljs.edn is required:
{:source-paths ["src"]
:dependencies [[mvc-works/hsl "0.1.2"]]
:builds {:app {:target :npm-module
:output-dir "compiled/"}}}
In this example,
-
source-pathsis where we put source code -
dependencies, well… -
buildsis a map with build ids and build configurations, and currently thebuild-idis:app. -
targetspecifies which platform(or usage) the code is compiled: -
-
:npm-modulestands for CommonJS modules
-
-
-
:browserstands for web browsers
-
-
-
:node-scriptstands for a standalone Node.js script
-
-
output-diris where the code is emitted to
Then, to compile ClojureScript in src/ to JavaScript in CommonJS to compiled/, just run the build-id called :app:
shadow-cljs compile app
It should work now. You may also need to check the full example here:
And to learn more about how to use shadow-cljs, please take a look that the README and Wiki pages of shadow-cljs:
If you got and thoughts, please share with use on Slack or fire Issues.