Creating a Command Line Tool
Are you tired of this?
$ node adder.js 4 9
4 + 9 = 13
Do you want this?
$ adder 4 9
4 + 9 = 13
WELL NOW YOU CAN!
Method 1:
Command Line Executable Javascript
Method 1
- Create a Javascript file
$ touch adder.js
Method 1
- Create a Javascript file
- Give it execute permission
$ chmod +x adder.js
Method 1
- Create a Javascript file
- Give it execute permission
- Tell it to interpret using Node
#!/usr/bin/env node
console.log('I added those 2 numbers in my head... I promise');
Method 1
- Create a Javascript file
- Give it execute permission
- Tell it to interpret using Node
- Run it!
$ ./adder.js 50 4
I added those 2 numbers in my head... I promise
Method 1
- Create a Javascript file
- Give it execute permission
- Tell it to interpret using Node
Run it!- Link it to your $path
$ ln adder.js /usr/local/bin/adder
Method 1
- Create a Javascript file
- Give it execute permission
- Tell it to interpret using Node
Run it!- Link it to your $path
- Run it!
$ adder 50 4
I added those 2 numbers in my head... I promise
Method 1: Overview
$ touch adder.js
$ chmod +x adder.js
$ ln adder.js usr/local/bin/adder
$ adder 17 24
17+24=41
#!/usr/bin/env node
var a1 = Number(process.argv[2]);
var a2 = Number(process.argv[3]);
var sum = a1 + a2;
console.log(a1 + "+" + a2 + "=" + sum);
Great! Can I require any Node packages?
No.
Method 2:
Make Your Own Node Package
Method 2
- Make a package.json file
$ npm init
name: (directory-name)
version: (1.0.0)
entry point: (index.js)
blah:
blah:
blah:
Method 2
- Make a package.json file
- Specify the command name
{
"name": "slide-test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\""
},
"author": "",
"license": "ISC",
///////////////////////////////////////
"bin": {
"commandname":"path/to/file"
},
"preferGlobal": true
///////////////////////////////////////
}
Method 2
- Make a package.json file
- Specify the command name
- Create a Javascript file
#!/usr/bin/env node
console.log("hello, world");
Method 2
- Make a package.json file
- Specify the command name
- Create a Javascript file
- Add the package to the $path
$ npm link
Method 2
- Make a package.json file
- Specify the command name
- Create a Javascript file
- Add the package to the $path
- Run it anywhere!
Method 2: Overview
$ npm init
$ touch adder.js
$ npm link
$ adder 17 24
17+24=41
adder.js:
#!/usr/bin/env node
var a1 = Number(process.argv[2]);
var a2 = Number(process.argv[3]);
var sum = a1 + a2;
console.log(a1 + "+" + a2 + "=" + sum);
package.json:
"bin": {
"commandname":"path/to/file"
},
"preferGlobal": true
Publishing to NPM
Publishing to NPM
- Create or login a user
$ npm adduser
OR
$ npm login
Publishing to NPM
- Create or login a user
- Publish
$ npm publish
Publishing to NPM
- Create or login a user
- Publish
- Update
$ npm version [patch]
CommanderJS:
Making command line parsing FUN!
CommanderJS
- Specify Command Line Options
program
.option('-c, --captain',
'Specify that this person is a captain.')
.option('-n, --name [name]',
'Specify the name of the person.',
'Jack Sparrow')
.parse(process.argv);
console.log(program.name);
CommanderJS
- Specify Usage
program
.usage('<directory> [options]');
CommanderJS
- Specify a Command and an Action
program
.command('angular <someVar>')
.description('')
.action(function callback(someVar, options) {
console.log('do some things');
});
CommanderJS
- Specify a Command from another file
program
.command('angular', 'this generator does some stuff!')
.command('angular-fullstack', 'this generator does more stuff!');
CommanderJS
- Alias a command
program
.command('yeoman')
.alias('yo')
.action(someCallback);
CommanderJS
- Receive automated help
$ griffin --help
Usage: griffin [options] [command]
Commands:
compliment [options] generate a random compliment
calculate|calc [options] <base> do some pretty complicated math
Options:
-h, --help output usage information
DEMO TIME!
Command Line Tool
- compliment
- calculate
Required package
- add
- subtract
- multiply
- divide
npm install
griffins-awesome-project
Command Line Tool
By gtelljohann
Command Line Tool
- 1,453