Standard input/output management module for NodeJS
To install the most recent release from npm, run:
npm install stdio
With stdio it is very easy to add suport for
command-line options to a NodeJS program. There is a function
called getopt() (like GNU utility) very easy to use. Imagine
you have a script which may receive the name and age of an
user, if he is redhead or not, and finally a folder with her files:
var stdio = require('stdio');
var options = stdio.getopt({
'name': {description: 'User name', mandatory: true, args: 1},
'surname': {description: 'User surname', args: 1},
'age': {key: 'a', description: 'User age', args: 1},
'redhead': {key: 'r', description: 'If he is redhead'}
});
Now, if you run your program with the following command:
node yourscript.js --name 'Rick' -r --age 33 /path/to/astley
Then the options object returned by getopt() will be as
follows:
{
'name': 'Rick',
'redhead': true,
'age': '33',
'args': ['/path/to/astley']
}
So you can perform checks and use provided data however you want:
console.log('Your name is %s', options.name);
if (options.redhead) {
console.log('You are redhead!');
}
Easy, isn't it?
Now try to run you program adding a non-specified option, like -x
for instance. What happens?
Unknown option: -k USAGE: node preuba.js [OPTIONS] --name < ARG1 > User name (mandatory) --surname < ARG1 > User surname -a, --age < ARG1 > User age -r, --redhead If he is redhead
It is cool!
The same info, with a proper error message, is shown if you forget to specify a mandatory option, or if you don't specify some required argument of an option.
You can print this usage info manually, too:
options.printHelp()
If you want to get the whole standard input at
once, stdio lets you write the following:
var stdio = require('stdio');
stdio.read(function(data){
console.log(data);
});
You can use it for small input files. It cannot be easier.
This simple code:
var stdio = require('stdio');
stdio.question('Is this a question?', ['y', 'n'], function (err, answer) {
// Use answer here
});
will show the provided question in the terminal, waiting user's answer:
Is this a question? [y/n]: