bin-tool
Version:
The utility tool to create powerful command line tools
152 lines (105 loc) • 3.21 kB
Markdown
[](https://travis-ci.org/kaelzhang/bin-tool)
[](https://codecov.io/gh/kaelzhang/bin-tool)
<!-- optional appveyor tst
[](https://ci.appveyor.com/project/kaelzhang/bin-tool)
-->
<!-- optional npm version
[](http://badge.fury.io/js/bin-tool)
-->
<!-- optional npm downloads
[](https://www.npmjs.org/package/bin-tool)
-->
<!-- optional dependency status
[](https://david-dm.org/kaelzhang/bin-tool)
-->
# bin-tool
The utility tool to create powerful command line tools
## Install
```sh
$ npm i bin-tool
```
## Usage
For example with annotations, see [example](example)
```
/path/to/project
|-- cli.js
|-- commands
|-- serve.js
|-- package.json
```
cli.js
```js
const {Command} = require('bin-tool')
const path = require('path')
class Bin extends Command {
constructor () {
super()
this.load(path.join(__dirname, 'commands'))
}
}
new Bin().start()
```
serve.js
```js
const {Command} = require('bin-tool')
module.exports = class extends Command {
constructor () {
super()
this.options = {
port: {
type: 'number',
default: 3000,
description: 'port to bind on'
}
}
}
run ({argv}) {
serve(argv.port)
}
}
```
package.json
```json
{
"name": "bin",
"bin": {
"bin": "./cli"
}
}
```
```sh
npm link
bin serve --port 8080
```
## new Command(argv = process.argv)
- **argv** `Array` specify the process argv
In most cases, we leave the `argv` unspecified to use the default value `process.argv` except for test purpose.
### load(path): this
- **path** `string` the full absolute path of the directory that contains sub commands
Load subtle commands
### setter: offset `number`
Set the offset of `process.argv` defaults to `2`
### setter: options `object`
Set the options of the command
### setter: usage `string`
Set the usage of the command
### setter: version `string`
Set the semantic version of the command
### override: run({cwd, argv, rawArgv}): void | Promise
- **cwd** the current working directory which equals to `process.cwd()`
- **argv** `object` the parsed argv object
- **rawArgv** `Array` the raw process argv
The method to override to define the behavior of the current command. If the method is not overridden, it will [`showHelp()`](#showhelp)
The `argv` object has a special `argv.__` property which contains the arguments after `'--'`
### alias(alias, commandName): this
- **alias** `string` the alias name of the command
- **commandName** `string` the original command name
Add an alias name for a command `commandName`
### async start(): void
Start the command
### errHandler(err)
Handle an error
### showHelp()
Print help message of the current command to stdout
## License
[MIT](LICENSE)