3.0.6 • Published 1 year ago

node-cmder v3.0.6

Weekly downloads
4
License
MIT
Repository
github
Last release
1 year ago

中文文档

Command line tools for Node.js & Typescript

Easily generate your command with a string signature. example:

command {arg1} {arg2 : arg2} {--bool-flag} {--A|age=10} description

signature

  • command name is omissible when not in group commond
  • array-type argument or optional arg must be at last
  • option shortcut or name can not be duplicated

Usage:

import { CommandBuilder } from 'node-cmder'

const signature = '{name} {--bool-flag} {--A|age=10} commanddescription'

CommandBuilder.command(signature)
  .setAction(({ args, options }) => {
    console.log(args, options)
  })
  .execute()

then run it

$ node test.js --help

Option parsing

{--bool}                     //  boolean option
{--bool : this is boolean}   //  option with description
{--B|bool}                   //  option with shortcut
{--version=}                 //  option need value (required)
{--version=10}               //  option with default value
{--version="has blank"}      //  option with default value contains blank
{--version?=}                //  option need value (optional)
{--tags=*}                   //  array option
{--tags?=*}                  //  array option (optional)

Argument parsing

{arg}                        // arg
{arg : this is arg}          //  arg with description
{arg?}                       // optional arg
{arg*}                       // array arg
{version?=}                  //  option need value (optional)
{tags=*}                     //  array arg
{tags?=*}                    //  array arg (optional)
{arg=10}                     //  arg with default value
{arg="has blank"}            //  arg with default value contains blank

Option transform and callback

.mergeOption('age',{transform:parseInt}) transform age to int .mergeOption('age',{callback:(v)=>console.log(v)}) option callback

built-in options

  • ---help enable by default, generate help automately. call .removeHelpOption() to disable it or .customHelp() to customize.
  • ---V|version to print command version , it is disabled by default. call .setVersion(v:string) to enable it.

Execute command

.execute (argv = process.argv.slice(2)) execute the commond with console. Note: process will exit automately when action return return "a never resolve Promise" to prevent, like new Promise(()=>{/**/})

Command Builder

  • .command(signature: string, action?: Types.Action | undefined): Command; build a simple commond
  • .groupCommand(): GroupCommand; build a group commond with can add sub commonds

Command & GroupCommand

  • .run(argv:string[]) run the command. different from .execute:

    • .run does not handle any Error,suitable for being called by program
    • .execute handle and print erros to terminal and exit process after action return.
  • .printHelp() print the help with console.log

  • .getHelpText() get the help text
  • .addOption() add the extra option
  • .addArg() add the extra argument (only Command)
  • .mergeOption(name,opt) set option metas

build command step by step

.addArg or .addOption method does not need { }

CommandBuilder.command('test {name : arg}')
    .addArg('name2')
    .addOption('--A|age')
    .setVersion('2.0.0')
    .setAction(({ args, options }) => {
        console.log(args, options)
    })

customHelp

.customHelp accept 2 types argument

  • string print the string instead origin help
  • function print the ret of function and pass orgin help as first argument
CommandBuilder.command('test {name : arg}')
    .addArg('name2')
    .addOption('--A|age=')
    .setVersion('2.0.0')
    .customHelp((origin) => {
        return origin + `\nExample:\n node test.js joe name 2 -A=20`
    })
    .setAction(({ args, options }) => {
        console.log(args, options)
    })
    .execute()

group commond

.addCommand accept a signature and action or commond instance

CommandBuilder.groupCommand()
    .addCommand('test1 {name : arg}', ({ args, options }) => {
        console.log(args, options)
    })
    .addCommand((g) => {
        return CommandBuilder.command('test2 {name : arg}')
            .setAction(({ args, options }) => {
                console.log(args, options)
            })
    })
    .execute()
3.0.6

1 year ago

3.0.4

4 years ago

3.0.5

4 years ago

3.0.3

5 years ago

3.0.2

5 years ago

3.0.1

5 years ago

3.0.0

5 years ago

2.1.6

5 years ago

2.1.5

5 years ago

2.1.4

5 years ago

2.1.3

6 years ago

2.1.2

6 years ago

2.1.1

6 years ago

2.1.0

6 years ago

2.0.6

6 years ago

2.0.5

6 years ago

2.0.4

6 years ago

2.0.3

6 years ago

2.0.2

6 years ago

2.0.1

6 years ago

2.0.0

6 years ago

1.0.2

6 years ago

1.0.0

6 years ago