https://github.com/kvnlnt/spawn
The super simple cli lib I always wanted.
https://github.com/kvnlnt/spawn
cli command-line command-line-parser command-line-tool command-line-tools
Last synced: 5 months ago
JSON representation
The super simple cli lib I always wanted.
- Host: GitHub
- URL: https://github.com/kvnlnt/spawn
- Owner: kvnlnt
- Created: 2018-04-04T05:29:49.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2018-10-17T02:08:54.000Z (over 7 years ago)
- Last Synced: 2025-12-10T04:03:13.118Z (7 months ago)
- Topics: cli, command-line, command-line-parser, command-line-tool, command-line-tools
- Language: JavaScript
- Homepage:
- Size: 68.4 KB
- Stars: 2
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Spawn
## Features
1. Create your own cli
2. Auto generates guide for cli and individual commands
3. Interactive mode (using `-i` flag)
4. Argument defaults
## Install
```shell
npm i @kvnlnt/spawn
```
## Usage
mycli.js
```javascript
// the lib
const cli = require("@kvnlnt/spawn");
// add a command, add an argument, a callback and an example
cli
.command("hello", "Prints hello")
.argument("output", "o", "Hello to")
.callback(resp => console.log("Hello,", resp.output))
.example("hello -o=World", "Prints; Hello World");
// add another
cli
.command("goodbye", "Prints goodbye")
.argument("output", "o", "Goodbye to")
.callback(resp => console.log("Goodbye,", resp.output))
.example("goodbye -o=World", "Prints: Goodbye World");
// set the default command
cli.defaultCommand("help");
// run the cli
cli.run();
```
Now set up your tool to be a cli with [npm link](https://docs.npmjs.com/cli/link) and you'll get something like this
```shell
mycli hello -o=You
# result => Hello You
```
## Methods
All methods are meant to be chained. This is to support a clean api. To keep things organized it's recommended that you keep your callbacks as external scripts. It keep my in a `tasks` folder.
### command(name, desc)
Adds a command
| Arg | Type | Desc |
| ---- | ------ | ---------------------- |
| name | string | name of command |
| desc | string | description of command |
### argument(name, abbr, desc, def)
Adds an argument to last added command
| Arg | Type | Desc |
| ---- | -------- | ------------------------- |
| name | string | name of argument |
| abbr | string | abbreviated argument name |
| desc | string | description of argument |
| def | anything | default value |
### callback(f)
Adds callback to last added command
| Arg | Type | Desc |
| --- | -------- | ---------------------------------------- |
| f | function | function called when command is executed |
### example(cmd, desc)
Adds example to last added command
| Arg | Type | Desc |
| ---- | ------ | --------------- |
| cmd | string | example command |
| desc | string | description |
### defaultCommand(cmd)
Sets default command
| Arg | Type | Desc |
| --- | ------ | --------------- |
| cmd | string | name of command |
### run()
Runs the cli
### printGuide()
This is the auto generated guide. To use it, assign it as a callback. Something like this:
```js
cli.command("guide", "Prints guide").callback(cli.printGuide);
```
### printCommandGuide()
This is the autogenerated guide for a command. Commands are bound to the cli instance and therefore are available inside the callback as `this.printCommandGuide`. Just pass in the string name of the command. Here's an example:
```js
// your callback
function myCallback(resp) {
if (resp.help === true) return this.printCommandGuide("myCallback");
console.log(resp.output);
}
// your cli
cli
.command("myCallback", "does stuff")
.argument("help", "h", "Output help", false)
.callback(myCallback);
```
The following will output the command's guide:
```shell
mycli myCallback -h
```
## Flags
### -i, Interactive Mode
You can pass the `-i` flag without a command and use your tool interactively, like this:
```shell
mycli -i
```
## Examples
All examples are in the [Examples](examples) folder.