Skip to content

输入参数

数据校验修正、别名、参数名缩写,来自框架的礼物

灵活的指令

typescript
// src/commanders/say.ts
import { rule } from '@aomex/core';
import { Commander, options } from '@aomex/console';

export const commander = new Commander();

commander.create('say', {
  mount: [
    options({
      sayToName: rule.string().default('World'),
    }),
  ],
  async action(ctx) {
    const { sayToName } = ctx.options;
    console.log(`Hello ${sayToName}`);
  },
});

继续输入指令:

bash
npx aomex say --sayToName Aomex

这次看到了不一样的文字:Hello Aomex

别名

参数名有点长了,不妨设置一个别名

typescript
export const commander = new Commander();

commander.create('say', {
  mount: [
    options(
      {
        sayToName: rule.string().default('World'),
      },
      { sayToName: ['m'] }, 
    ),
  ],
  async action(ctx) {
    const { sayToName } = ctx.options;
    console.log(`Hello ${sayToName}`);
  },
});

设置了别名,原来的参数名也可以继续使用。

bash
npx aomex say -m Aomex
npx aomex say --sayToName Aomex

--no-前缀

参数名如果加上了--no-前缀,则代表它的值是false,而且我们在逻辑中不需要关心这个前缀

bash
npx aomex schedule --reload     # reload=true
npx aomex schedule --no-reload  # reload=false

传递对象

虽然命令行只能传递字符串,但是对象验证器有一个方法叫做parseFromString(),可以轻松地获取对象

typescript
commander.create('schedule', {
  mount: [
    options({
      user: rule
        .object({
          id: rule.int(),
          name: rule.string,
        })
        .parseFromString(),
    }),
  ],
  action(ctx) {
    console.log(ctx.options.user);
  },
});

接着执行这么一段指令:

bash
npx aomex schedule --user '{"id":1,"name":"bill"}'

办法总是比困难多,欢呼吧!

快速查看参数

执行指令npx aomex say --help,可以看到如下文字:

aomex say [选项]

打招呼详情

选项:
  -m, --sayToName           [字符串] [默认值: "World"]