cvx
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 = // 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
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:
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 <olivia@fastmail.com>
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)