cvx
v1.0.0
Published
distributed command facilitator
Downloads
8
Readme
About
cvx
is a small library to help you create your own distributed command-line interfaces!
Distributed means that none of the commands are in a central place, instead
they are executed directly from the npm registry, using a little tool called npx.
This means that your commands are always extendable, and Very Fast.
For example, it is extremely easy to build a tool similar to Yeoman. You'd use it like this:
yo my-template
Using cvx
, you would just need to publish a npm package called generator-my-template
that exposes a binary of the same name, and that would be it! No more setup would
be required.
Installation
You need Node.js 7.6 or higher.
npm install cvx
Example
Let's quickly implement the Yeoman example from above:
const cvx = require('cvx')
// this is our main function!
// it's an async function because it implicitly returns a promise. don't
// think too much about it, it's not important right now
cvx(async cmd => {
// cmd is our 'command object'. it's basically a way to keep state,
// such as config and hooks
// let's give it a prefix and our command-line arguments:
cmd.config({
prefix: 'generator-',
args: process.argv
})
// that's it! now we return the cmd object
return cmd
})
Now, if you run:
node example.js my-template
# or, had we set it up as an executable:
./example.js my-template
This will automatically download and execute generator-my-template
from npm.
API
cvx(function (cmd))
Constructs a command. This function takes another function that basically 'describes' how the whole thing behaves when it's executed. It looks a bit like this:
cvx(async cmd => {
// your definition here
return cmd
})
The inner function takes a cmd
parameter. This object basically keeps all of
the state. The function needs to return cmd
, wrapped in a promise. Thankfully,
this is made easy by just prefixing the function with async
, which automatically
makes it return a promise.
cmd.config(conf)
Configures the command. If conf
is blank, uses the default config:
- prefix: What the npm package lookup is prefixed by. Default:
''
- args: The command line arguments. Required.
cmd.pre(fn)
Registers a hook to run before the main command is run. The inner function takes
the current cmd
state as a parameter, and can modify it. Needs to return cmd
.
cmd.post(fn)
Like cmd.pre
, but runs after command execution.
Maintainers
- Olivia Hugger <[email protected]>
Code of Conduct
This repository operates under the weallbehave
Code of Conduct. Its contents can be found in CODE_OF_CONDUCT.md
.
License
MIT (see LICENSE document)