Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/h-a-n-a/pero

πŸ˜— Easy to use route-based tool for building large-scale command-line interfaces
https://github.com/h-a-n-a/pero

cli command-line node typescript

Last synced: 12 days ago
JSON representation

πŸ˜— Easy to use route-based tool for building large-scale command-line interfaces

Awesome Lists containing this project

README

        

pero logo


Pero


Route based CLI tool for creating large scale command line interfaces.




Build Status


npm-v

## 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](https://github.com/h-a-n-a/pero/issues/1)**

### 1. Install

```bash
npm install pero --save
# or use
yarn add pero
```

### 2. Create a folder for CLI

```bash
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
```

### 3. `vim index.ts`

Add the code and finish your first Pero app!

```typescript
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

```bash
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.

```bash
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:

```bash
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](https://github.com/h-a-n-a/pero/issues/1) to get the latest update!

## Acknowledgement

Special thanks to @yisar132 for the logo, it's great!

## LICENSE

[MIT](./LICENSE) License Β© 2021 [H](https://github.com/h-a-n-a)