Pero
Route based CLI tool for creating large scale command line interfaces.
Why?
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.
Feature
- Route based, born to create nested CLI commands
- ESBuild driven, really fast to compile your CLI project
Quick Tour
This project is under heavy development, APIs might be changed until the stable version is released. πRoadmap
1. Install
npm install pero --save
# or use
yarn add pero
2. Create a folder for CLI
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
3. 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:
- Step1: Registration, in the outer callback we have
command
passed as the first param, you can utilize this to define your command's arguments or options. - Step2: Action, in the inner callback we have
args
passed to, you may do something with user-input args
4. Compile and run
npx 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
Advanced Usage
Nested Command
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!
πRoadmap
This project is under heavy development, you may refer to this to get the latest update!
Acknowledgement
Special thanks to @yisar132 for the logo, it's great!