Yargs Interactive
See the blog post
Interactive (prompt) support for yargs, based on inquirer. Useful for using the same CLI for both for humans and non-humans (like CI tools). Also supports mixed mode (yay!).
This tool helps you to build command line tools without worring to parse arguments, or develop the logic to ask them.
Installation
npm install -S yargs-interactive
Then, add this code in your CLI code to get all the arguments parsed:
#!/usr/bin/env node
const yargsInteractive = require('yargs-interactive');
const options = {
name: { type: 'input', default: 'A robot', describe: 'Enter your name' },
likesPizza: { type: 'confirm', default: false, describe: 'Do you like pizza?' },
};
yargsInteractive()
.usage('$0 <command> [args]')
.interactive(options)
.then((result) => {
myCli(result.name);
});
By simply wrapping your CLI code with this tool, you will get all the information you need from the user.
Note: See more usage examples in the examples folder.
Usage
It supports the following use cases
Prompt questions with default values (full-interactive)
my-cli.js
const yargsInteractive = require('yargs-interactive');
const options = {
name: {
type: 'input',
default: 'nano',
describe: 'Enter your name'
},
likesPizza: {
type: 'confirm',
default: false,
describe: 'Do you like pizza?'
},
};
yargsInteractive()
.usage('$0 <command> [args]')
.interactive(options)
.then((result) => {
console.log(result)
});
Usage in terminal
➜ node my-cli.js --interactive
If you want to use interactive mode always, just set the --interactive`` parameter to
true` by default.
const options = {
interactive: { default: true },
...
};
yargsInteractive()
.usage('$0 <command> [args]')
.interactive(options)
.then((result) => {
console.log(result)
});
And then simply call your CLI with no parameters.
➜ node my-cli.js
Options
Property | Type | Description |
---|
type | string | (Required) The type of the option to prompt (e.g. input , confirm , etc.). We provide all prompt types supported by Inquirer. |
describe | string | (Required) The message to display when prompting the option (e.g. Do you like pizza? ) |
default | any | The default value of the option. |
prompt | string | (Default is if-empty ) Property to decide whether to prompt the option or not. Possible values: always , never and if-empty , which prompts the option if the value wasn't set via command line parameters or using the default property. |
Prompt just some questions (mixed mode)
You can opt-out options from interactive mode by setting the prompt
property to never
.
my-cli.js
const yargsInteractive = require('yargs-interactive');
const options = {
name: {
type: 'input',
name: 'nano',
describe: 'Enter your name'
},
likesPizza: {
type: 'confirm',
default: false,
describe: 'Do you like pizza?',
prompt: 'never'
},
};
yargsInteractive()
.usage('$0 <command> [args]')
.interactive(options)
.then((result) => {
console.log(result);
});
By default, its value is if-empty
, prompting the question to the user if the value was not set via command line parameters or using the default property. Last, you can use always
to always prompt the option.
Usage in terminal
➜ node my-cli.js --name='Johh' --interactive
No prompt at all (ye olde yargs)
my-cli.js
const yargsInteractive = require('yargs-interactive');
const options = {
name: {
type: 'input',
name: 'nano',
describe: 'Enter your name'
},
likesPizza: {
type: 'confirm',
default: false,
describe: 'Do you like pizza?'
},
};
yargsInteractive()
.usage('$0 <command> [args]')
.interactive(options)
.then((result) => {
console.log(result);
});
Usage in terminal
➜ node my-cli.js --name='Johh' --likesPizza