leo / args

Toolkit for building command line interfaces
https://npmjs.com/args
MIT License
461 stars 30 forks source link

Handling top level command #141

Open KidkArolis opened 5 years ago

KidkArolis commented 5 years ago

Maybe I'm missing something, but how do I handle the top level command?

args
  .command('a', 'Import data', a)
  .command('b', 'Export data', b)

This will run a or b if I run ./cmd a or ./cmd b.

But if I run ./cmd, it's hanging (cause my script opens db connection), how do I a) print help or b) execute some code?

KidkArolis commented 5 years ago

OK, if I remove the db connection, it prints help, I'll shuffle my code around.

KidkArolis commented 5 years ago

No it doesn't actually.

If I just run bin/import without any other arguments, the program just exists. Didn't see any docs on how to either print help or execute some code in this case.

Had to resort with wrapping my command callbacks with a wrapper function that sets a boolean executedCommand = true which seems suboptimal.

ntwcklng commented 5 years ago

Hey @KidkArolis you can show the Help on your main command (with no arguments) with this function: .showHelp(). It is listed in the Docs: Bildschirmfoto 2019-06-29 um 12 20 01

Does this fix your problem?

KidkArolis commented 5 years ago

No. I will post a reproducible example shortly.

On Sat, 29 Jun 2019 at 12:21, Marvin Mieth notifications@github.com wrote:

Hey @KidkArolis https://github.com/KidkArolis you can show the Help on your main command (with no arguments) with this function: .showHelp(). It is listed in the Docs: [image: Bildschirmfoto 2019-06-29 um 12 20 01] https://user-images.githubusercontent.com/8714775/60382775-40720000-9a68-11e9-8403-f3c5e09a3350.png

Does this fix your problem?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/leo/args/issues/141?email_source=notifications&email_token=AACPGWAD4LT6RR7WQA3M7YTP44ZRLA5CNFSM4HZJ4NO2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODY3WG6Y#issuecomment-506946427, or mute the thread https://github.com/notifications/unsubscribe-auth/AACPGWG2DUNWZRVPRVLTP53P44ZRLANCNFSM4HZJ4NOQ .

KidkArolis commented 5 years ago

Here's what I mean, taking the example from README (slightly modified):

#!/usr/bin/env node

const args = require('args')

args
  .option('port', 'The port on which the app will be running', 3000)
  .option('reload', 'Enable/disable livereloading')
  .command('serve', 'Serve your static site', serve, ['s'])

const flags = args.parse(process.argv)

function serve () {
  console.log('serving...')
}

This works fine:

$ ./hello serve
serving...
$ 

But how do I make sure that the following executions print help:

$ ./hello badcommand
$
$ ./hello
$

I'm thinking.. perhaps loop over args.details.commands to match sub against each command..