ezcli

Easily create multi-command CLI apps (similar to git).

Usage no npm install needed!

<script type="module">
  import ezcli from 'https://cdn.skypack.dev/ezcli';
</script>

README

ezcli npm version

Easily create multi-command CLI apps (similar to git).

ezcli was inspired by the excellent commander.js package. Check it out if you need something more full-featured.

Installation

npm i ezcli -S

Usage

package.json

{
  "name": "cli-app",
  "version": "1.0.0",
  "bin": "./app.js"
}

app.js

#!/usr/bin/env node
const cli = require('ezcli')

cli('cli-app')
  .command('subcommand', () => {
    console.log('in subcommand')
  })
  .command('commandWithArg', (arg) => {
    console.log(`commandWithArgs: ${arg}`)
  })
  .command('optionalParams', (required, optional = 'default') => {
    console.log(`optionalParams: ${required} ${optional}`)
  })
  .process()

Resulting app

~ $ cli-app

  v1.0.0

  Usage: cli-app <command>

  Commands:
    subcommand
    commandWithArg <arg>
    optionalParams <required> [optional = 'default']

~ $ cli-app subcommand
in subcommand

~ $ cli-app commandWithArg

  Usage: cli-app commandWithArg <arg>

~ $ cli-app commandWithArg test
commandWithArgs: test

~ $ cli-app optionalParams

  Usage: cli-app optionalParams <required> [optional = 'default']

~ $ cli-app optionalParams abc
optionalParams: abc default

~ $ cli-app optionalParams abc 123
optionalParams: abc 123

API

cli(name:string)

Declare the cli app with the given name. The name should match the defined binary name in your package.json (more info).

command(name:string, fn:function)

Define a subcommand with a given name. Names should be unique and should contain no whitespace. fn will be executed when this subcommand is invoked.

Any parameters defined in fn will become part of the command signature. E.g., command('test', (thing) => {}) will produce the signature test <thing>.

Optional parameters are acceptible, but only at the end of the parameter list. E.g., command('test', (a, b='default') => {}) will produce test <a> [b='default'].

command is chainable, so you may add several commands in sequence.

process()

process is used to indicate the end of your cli app definition. Once it is called, it will beging processing any command line arguments passed in to your cli app, and will execute the correct subcommand or print usage information.

Assumptions and Considerations

ezcli assumes there is a version defined in your package.json. It will automatically use this as part of your app usage message.

ezcli requires node version >= 6.0.0. It is recommended that you set the required minimum node version within your package.json (more info)