Pero
Route based CLI tool for creating large scale command line interfaces.
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.
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
Pero CLI is currently under development, so you need to do the compilation yourself by adding a compiler.
Add compile.ts
in the root of the whole project, and your project topography will look like this:
.
├── src
│ └── index.ts
└── compile.ts
Add some code for compilation:
import path from 'path'
import { Compiler } from 'pero'
(async () => {
const compiler = new Compiler({
outDir: path.resolve(__dirname, './dist'),
root: path.resolve(__dirname, 'src'),
name: 'name-your-cli'
})
await compiler.compile()
})()
Compiled CLI will be emitted to the outDir
you defined above.
Run the code below, you will get the corresponding help message in the terminal.
node ./dist/index.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!
LICENSE
MIT