Skip to content

Instantly share code, notes, and snippets.

@iSkore
Last active February 23, 2016 17:49
Show Gist options
  • Save iSkore/ad65ba5abfa63c5117a9 to your computer and use it in GitHub Desktop.
Save iSkore/ad65ba5abfa63c5117a9 to your computer and use it in GitHub Desktop.
Node JS CLI Tool Creation

Node JS CLI Tool Creation

Original post

Create your module folder

mkdir [cli_name] && cd [cli_name]
npm init

Fill out your information

Create your index.js file:

#!/usr/bin/env node
console.log( 'CLI Tool Works!' );

Edit your package.json - add in:

"bin": {
    "namecli": "./index.js"
}

From inside the module directory, run:

$ [sudo] npm i -g

Test out your CLI Tool by typing in your command:

$ namecli
CLI Tool Works!

Now make your CLI Tool universal:

$ which namecli
/usr/local/bin/namecli
$ readlink /usr/local/bin/cli
../lib/node_modules/cli_name/index.js

$ npm link
/usr/local/bin/namecli -> /usr/local/lib/node_modules/cli_name/index.js
/usr/local/lib/node_modules/cli_name -> /Users/Me/src/cli_name

Now its installed globally!

Go into any folder and run your cli tool!

$ cd
$ namecli
CLI Tool Works!

Now make your extra stuff:

$ npm install --save commander

Add to your index.js:

#!/usr/bin/env node
const
    program = require('commander');

program
    .arguments('<file>')
    .option('-u, --username <username>', 'The user to authenticate as')
    .option('-p, --password <password>', 'The user\'s password')
    .action(function(file) {
        console.log('user: %s pass: %s file: %s',
        program.username, program.password, file);
    })
    .parse(process.argv);

Example use:

$ namecli -u Me -p sooperdooperpassword path/to/your/file
user: Me pass: sooperdooperpassword file: path/to/your/file

$ namecli --help
Usage: snippet [options] <file>

Options:

    -h, --help                 output usage information
    -u, --username <username>  The user to authenticate as
    -p, --password <password>  The user's password

More:

$ npm install --save co co-prompt

Add to index.js

const
    co = require('co'),
    prompt = require('co-prompt'),
    program = require('commander');
    
program
    .arguments('<file>')
    .option('-u, --username <username>', 'The user to authenticate as')
    .option('-p, --password <password>', 'The user\'s password')
    .action(function(file) {
        co(function *() {
            var username = yield prompt('username: ');
            var password = yield prompt.password('password: ');
            console.log('user: %s pass: %s file: %s', username, password, file);
        });
    })
    .parse(process.argv);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment