commander.jsでコマンド指定がない場合にヘルプを出す

CLIコマンドを作っていると、Serverless FWのようにデフォルトではヘルプを出したい時があります。 commander.jsでやる方法がissueにありましたので、ほぼ自分向けにまとめます。 From: Sh […]

広告ここから
広告ここまで

目次

    CLIコマンドを作っていると、Serverless FWのようにデフォルトではヘルプを出したい時があります。

    $ sls
    
    Commands
    * You can run commands with "serverless" or the shortcut "sls"
    * Pass "--verbose" to this command to get in-depth plugin info
    * Pass "--help" after any <command> for contextual help
    
    Framework
    * Documentation: https://serverless.com/framework/docs/
    
    config ........................ Configure Serverless
    config credentials ............ Configures a new provider profile for the Serverless Framework
    create ........................ Create new Serverless service
    

    commander.jsでやる方法がissueにありましたので、ほぼ自分向けにまとめます。

    From: Show help if no command was executed #7

    program.argsのlengthで判定する

    slsのようにコマンドがない場合、program.argsが空になります。ということで、ここを使って判定しようという解決策の様子です。

    #!/usr/bin/env node
    
    /**
     * Module dependencies.
     */
    const program = require('commander')
    
    // バージョン情報
    program
      .version('0.0.1', '-v, --version')
    
    program
      .command('exec <cmd>')
      .alias('ex')
      .description('execute the given remote cmd')
      .option("-e, --exec_mode <mode>", "Which exec mode to use")
      .action((cmd, options) => {
        const mode = options.exec_mode || 'default'
        console.log('exec "%s" using %s mode', cmd, mode)
      }).on('--help', function() {
        console.log('  Examples:')
        console.log()
        console.log('    $ deploy exec sequential')
        console.log('    $ deploy exec async')
        console.log()
      })
    
    program.parse(process.argv)
    
    
    // For default, show help
    const NO_COMMAND_SPECIFIED = program.args.length === 0;
    if (NO_COMMAND_SPECIFIED) {
      // e.g. display usage
      program.help();
    }

    これで何もコマンドを渡さない場合はヘルプを出すようになります。

    $ ./cli.js 
    
      Usage: cli [options] [command]
    
      Options:
    
        -v, --version            output the version number
        -h, --help               output usage information
    
      Commands:
    
        exec|ex [options] <cmd>  execute the given remote cmd

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark