Not babashka. Node.js babashka!?
Previously known as TBD and Nodashka.
Experimental.
Install nbb
from NPM:
$ npm install -g nbb
and perhaps some other NPM libraries to use in the script. E.g.:
$ npm install csv-parse
$ npm install shelljs
Create a script which uses the NPM libraries:
(ns script
(:require ["csv-parse/lib/sync" :as csv-parse]
["fs" :as fs]
["shelljs" :as sh]))
(println (count (str (fs/readFileSync "script.cljs"))))
(prn (sh/ls "."))
(prn (csv-parse "foo,bar"))
Call the script:
$ nbb script.cljs
264
#js ["CHANGELOG.md" "README.md" "bb.edn" "deps.edn" "main.js" "node_modules" "out" "package-lock.json" "package.json" "shadow-cljs.edn" "src" "test.cljs"]
#js [#js ["foo" "bar"]]
Nbb includes reagent.core
which will be lazily loaded when required. You
can use this together with ink to create
a TUI application:
$ npm install ink
ink-demo.cljs
:
(ns ink-demo
(:require ["ink" :refer [render Text]]
[reagent.core :as r]))
(defonce state (r/atom 0))
(doseq [n (range 1 11)]
(js/setTimeout #(swap! state inc) (* n 500)))
(defn hello []
[:> Text {:color "green"} "Hello, world! " @state])
(render (r/as-element [hello]))
The baseline startup time for a script is about 200ms seconds on my laptop. When
invoked via npx
this adds another 300ms or so, so for faster startup, either
use a globally installed nbb
or use $(npm bin)/nbb script.cljs
to bypass
npx
.
Prequisites:
- babashka >= 0.4.0
- Clojure CLI >= 1.10.3.933
- Node.js 16.5.0 (lower version may work, but this is the one I used to build)
To build:
- Clone and cd into this repo
bb release
Copyright © 2021 Michiel Borkent
Distributed under the EPL License. See LICENSE.