π Easy to use route-based tool for building large-scale command-line interfaces
MIT License
Nowadays, we have commander.js and all the other cli tools to choose, but why we build yet another cli tool ?
In the real-world scenario, nested commands are so popular among large-scale projects. Pero is trying to solve this problem and also bring you with the progressive TypeScript support.
This project is under heavy development, APIs might be changed until the stable version is released. πRoadmap
npm install pero --save
# or use
yarn add pero
mkdir src
cd $_
touch index.ts # or index.js
In the example above, index.ts
is created in the root of the CLI source folder src
,
which is defined as the top-most command in CLI.
.
βββ src
βββ index.ts
vim index.ts
Add the code and finish your first Pero app!
import { Command, Args } from 'pero'
export default (command: Command) => {
// command registration: define your command here
command
.argument('[something]', 'your-description')
.option('-e', 'environment')
// action
return (args: Args) => {
// do something with user-input args here
command.help() // print help message
}
}
In Pero, we have to two steps in our runtime:
command
passed as the first param, you can utilize this to define your command's arguments or options.args
passed to, you may do something with user-input argsnpx pero src --name "name-your-cli"
Your CLI will be emitted to dist
Run the code below, you will get the corresponding help message in the terminal.
node ./dist/pero.js
With the demo project introduced in the Quick Tour section, try to add a new folder under src
folder,
you will get the nested command right away! This is really cool.
.
βββ src
βββ build ## the sub-command we added
β βββ index.ts
βββ index.ts
To trigger the sub-command build
, do the compilation first and run:
node ./dist/index.js build
You will see anything in the sub-command's action printed to the screen. Great!
This project is under heavy development, you may refer to this to get the latest update!
Special thanks to @yisar132 for the logo, it's great!