Homerun
Turn npm package scripts into CLI commands
Since npm 2.0, you can pass arguments to scripts... wait... what if you could use that for creating CLIs?
Homerun is a little experiment that lets you just do that. If you need more, I highly recommend minimist.
Usage
Let's say you have a script called add
that you can run this way:
npm run add -- 1 2
3
Install homerun
npm install homerun --save
Add it to your package.json
{
"name": "cli"
"bin": "./node_modules/.bin/homerun"
"scripts": {
"add": "node commands/add"
}
}
Now, without any other setup, if you npm link
or npm publish
you get a CLI for free:
cli add 1 2
3
And of course, while you develop, you can still use npm run add -- 1 2
to test your command.
Options
Homerun will use these scripts in case no command is provided or matches.
"scripts": {
"index": "node commands/index"
"unknown": "node commands/help"
}
Module
If you need to customize, homerun can be used as a module.
var homerun = require('homerun')
var scripts = require('./package.json').scripts
homerun(scripts, process.argv).spawn()
{
"bin": "index.js"
}
Test
To test your commands, you can use homerun.exec()
var assert = require('assert')
var argv = [,, 'add', '1', '2']
homerun(scripts, argv).exec(function(err, stdout, stderr) {
assert.equal(err, null)
assert.equal('', stderr)
assert.equal('3\n', stdout)
})
Limit
Homerun doesn't support multiple commands. For example, echo foo && echo bar
won't work.
License
MIT - Typicode