Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

    command-line-commandspublic

    view on npm npm module downloads Build Status Coverage Status Dependency Status js-standard-style

    command-line-commands

    A lightweight module to help build a git-like command interface for your app.

    Its job is to extract the command (the first argument, unless it's an option), check it's valid and either return it or throw. From there, you can parse the remaining args using your preferred option parser (e.g. command-line-args, minimist etc.).

    Synopsis

    Create a list of valid commands (null represents "no command"). Supply it to commandLineCommands(), receiving back an object with two properties: command (the supplied command) and argv (the remainder of the command line args):

    const commandLineCommands = require('command-line-commands')
     
    const validCommands = [ null, 'clean', 'update', 'install' ]
    const { command, argv } = commandLineCommands(validCommands)
     
    /* print the command and remaining command-line args */
    console.log('command: %s', command)
    console.log('argv:    %s', JSON.stringify(argv))

    We'll assume the above script is installed as example. Since the validCommands list includes null, running it without a command is valid:

    $ example
    command: null
    argv:    []
    

    Running example with no command and one option:

    $ example --verbose
    command: null
    argv:    ["--verbose"]
    

    Running example with both a command and an option:

    $ example install --save something
    command: install
    argv:    ["--save","something"]
    

    Running example without a valid command will cause commandLineCommands() to throw.

    From here, you can make a decision how to proceed based on the command and argv received. For example, if no command (null) was passed, you could parse the remaining argv for general options (in this case using command-line-args):

    if (command === null) {
      const commandLineArgs = require('command-line-args')
      const optionDefinitions = [
        { name: 'version', type: Boolean }
      ]
     
      // pass in the `argv` returned by `commandLineCommands()`
      const options = commandLineArgs(optionDefinitions, { argv })
     
      if (options.version) {
        console.log('version 1.0.1')
      }
    }

    The same example, using minimist:

    if (command === null) {
      const minimist = require('minimist')
     
      // pass in the `argv` returned by `commandLineCommands()``
      const options = minimist(argv)
     
      if (options.version) {
        console.log('version 1.0.1')
      }
    }

    More examples

    Both examples use command-line-args for option-parsing.

    • Simple: A basic app with a couple of commands.
    • Advanced: A more complete example, implementing part of the git command interface.

    Usage guides

    Usage guides can be generated by command-line-usage. Here is a simple example (code):

    usage

    API Reference

    Example

    const commandLineCommands = require('command-line-commands')

    commandLineCommands(commands, [argv]) ⇒ Object ⏏

    Parses the argv value supplied (or process.argv by default), extracting and returning the command and remainder of argv. The command will be the first value in the argv array unless it is an option (e.g. --help).

    Kind: Exported function
    Throws:

    • INVALID_COMMAND - user supplied a command not specified in commands.
    Param Type Description
    commands string | Array.<string> One or more command strings, one of which the user must supply. Include null to represent "no command" (effectively making a command optional).
    [argv] Array.<string> An argv array, defaults to the global process.argv if not supplied.

    © 2015-17 Lloyd Brookes <75pound@gmail.com>. Documented by jsdoc-to-markdown.

    install

    npm i command-line-commands

    Downloadsweekly downloads

    22,262

    version

    2.0.1

    license

    MIT

    repository

    githubgithub

    last publish

    collaborators

    • avatar