Skip to content

Latest commit

 

History

History
78 lines (58 loc) · 2.03 KB

README.md

File metadata and controls

78 lines (58 loc) · 2.03 KB

Publishing an nbb project to npm

This document describes how to publish an nbb based project to npm. As an example we will build a CLI, print-cli-args that prints command line arguments.

First, create a new directory print-cli-args and cd into it. Then create a package.json:

{
  "name": "print-cli-args",
  "version": "0.0.1",
  "dependencies": {
    "nbb": "0.0.109"
  },
  "bin": {
    "print-cli-args": "index.mjs"
  }
}

The CLI depends on a specific version of nbb and exposes itself as a binary called print-cli-args, which is linked to index.mjs in our project. It is important to use .mjs rather than .js so Node.js recognizes the file as an ES6 module.

The index.mjs file is a small wrapper that sets up the classpath for nbb to the src directory relative to the wrapper using addClassPath. It also calls the initial CLJS file using loadFile.

#!/usr/bin/env node

import { addClassPath, loadFile } from 'nbb';
import { fileURLToPath } from 'url';
import { dirname, resolve } from 'path';

const __dirname = fileURLToPath(dirname(import.meta.url));

addClassPath(resolve(__dirname, 'src'));
await loadFile(resolve(__dirname, 'src/print_cli_args/core.cljs'));

Finally, in src/print_cli_args/core.cljs we write the CLJS code:

(ns print-cli-args.core
  (:require [clojure.string :as str]))

(def cmd-line-args (not-empty (js->clj (.slice js/process.argv 2))))

(println "Your command line arguments:"
         (or (some->> cmd-line-args (str/join " "))
             "None"))

To test the CLI in development, run node index.mjs 1 2 3.

When you npm install -g from within the project, you can call print-cli-args from anywhere on your system.

When everything looks good, it's time to npm publish so everyone can enjoy your new CLI.

After you have done so, you can run this example from npm using:

$ npx print-cli-args 1 2 3
Your command line arguments: 1 2 3

or:

$ npm install -g print-cli-args
$ print-cli-args 1 2 3
Your command line arguments: 1 2 3