Skip to content
/ nbb Public
forked from babashka/nbb

Scripting in Clojure on Node.js using SCI

License

Notifications You must be signed in to change notification settings

MTrost/nbb

Repository files navigation

Nbb

Not babashka. Node.js babashka!?

Previously known as TBD and Nodashka.

Status

Experimental.

Usage

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"]]

Reagent

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]))

Startup time

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.

Build

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

License

Copyright © 2021 Michiel Borkent

Distributed under the EPL License. See LICENSE.

About

Scripting in Clojure on Node.js using SCI

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Clojure 99.7%
  • JavaScript 0.3%