CLI utility in ClojureScript running on Node.js

17
Clojure on Node Building a CLI utility

Transcript of CLI utility in ClojureScript running on Node.js

Page 1: CLI utility in ClojureScript running on Node.js

Clojure on NodeBuilding a CLI utility

Page 2: CLI utility in ClojureScript running on Node.js

Why?• Startup speed - Node.js apps start faster• Easier distribution -- ```npm install -g

<app>```• Way to learn core.async• AWS Lambda/Google Cloud Functions

(serverless architecture)• Server-side rendering

Page 3: CLI utility in ClojureScript running on Node.js

ClojureScript build process

*.cljs files

*.js file(s)

Google Closurecompiler

ClojureScriptcompiler

compiles cljs->js

compilesjs->optimized-js

Page 4: CLI utility in ClojureScript running on Node.js

Setting up Leiningen

Page 5: CLI utility in ClojureScript running on Node.js

Setting up Leinigen (cont'd)

Page 6: CLI utility in ClojureScript running on Node.js

Hello, World!

Page 7: CLI utility in ClojureScript running on Node.js

Building

Page 8: CLI utility in ClojureScript running on Node.js

Read Eval Print Loop demo

Page 9: CLI utility in ClojureScript running on Node.js

REPLstarts

nodejs process on random port

does this:

and sends user commands to nodejs process, started by repl-env, over the network socket

used by IDEs

Page 10: CLI utility in ClojureScript running on Node.js

Parsing ars - clj.tools.cli

Page 11: CLI utility in ClojureScript running on Node.js

Parsing args (cont'd)

Page 12: CLI utility in ClojureScript running on Node.js

Interop with Node.js libraries

compiles into

Page 13: CLI utility in ClojureScript running on Node.js

Callbacks

Page 14: CLI utility in ClojureScript running on Node.js

core.async for callbacks

https://github.com/georgewsinger/cljs-callback-heaven/blob/master/src/cljs_callback_heaven/core.cljs

Page 15: CLI utility in ClojureScript running on Node.js

core.async for callbacks (cont'd)

https://github.com/mailhog/MailHog

Page 16: CLI utility in ClojureScript running on Node.js

core.async for promises

Page 17: CLI utility in ClojureScript running on Node.js

Links• clojars.org/<template-name>/lein-template

=>```lein new <template-name> <project-name>```

• https://clojars.org/cljs-node/lein-template• https://clojars.org/cljs-node-app/lein-template• https://clojars.org/node-cljs/lein-template• https://clojars.org/node-cli/lein-template• https://github.com/karolisl/repomaker -- my cljs-node project• https://github.com/Gozala/node.core -- some helper functions working on

node• https://github.com/GregorStocks/cljs-http-node -- core.async based http

client for node