灵感来自于 laravel artisan commond.
-
通过builder定义一个命令
import * as cmder from 'node-cmder' const signature = '{name} {--bool-flag} {--A|age=10} description' cmder.buildCommand(signature,({ args, options }) => { console.log(args, options) }) .execute()
-
通过构造函数一个命令
import * as cmder from 'node-cmder' const signature = '{name} {--bool-flag} {--A|age=10} description' const cmd = new cmder.Command(signature) cmd.setAction(({ args, options }) => { console.log(args, options) }) .execute()
-
定义子命令
import * as cmder from 'node-cmder' cmder.buildGroupCommand() .addCommand('test1',({ args, options }) => { console.log(args, options) }) .addCommand('test2',({ args, options }) => { console.log(args, options) }) .execute()
node bin.js --help
-
通过装饰器定义
// src/tests/test.ts import { BaseCommand, DefineCommand } from '..'; @DefineCommand('test {--test} a test command') export class Test extends BaseCommand { handle() { console.log(this.option('test')) } } // src/bin.ts import * as cmder from '.'; cmder.buildGroupCommand() .scanCommands('./dist/test/**.js') // glob pattern .execute()
.buildCommand(signature: string, action?: Types.Action | undefined): Command;.buildGroupCommand(): GroupCommand;
-
.run(argv:string[])运行命令,与.execute不同点:.run不会处理任何异常,也不支持交互.execute处理异常并在控制台打印相关信息
-
.printHelp()打印错误信息 -
.getHelpText()获取错误文本 -
.addOption()增加选项 -
.addArg()增加arg -
.mergeOption(name,opt)覆盖选项的设置
commond {arg1} {arg2} {arg3*} {--O|option} description
- 不需要组织命令的时候 command 可以省略
- arg 数组或者 可选的 arg 必须是最后一个
- 选项的缩写和名字不允许重复
{--bool} // boolean option
{--bool : this is boolean} // option with description
{--B|bool} // option with shortcut
{--version=} // option need value (required)
{--version=10} // option with default value
{--version="has blank"} // option with default value contains blank
{--version?=} // option need value (optional)
{--tags=*} // array option
{--tags?=*} // array option (optional)
{arg} // arg
{arg : this is arg} // arg with description
{arg?} // optional arg
{arg*} // array arg
{version?=} // option need value (optional)
{tags=*} // array arg
{tags?=*} // array arg (optional)
{arg=10} // arg with default value
{arg="has blank"} // arg with default value contains blank
.mergeOption('age',{transform:parseInt}) transform age to int
.mergeOption('age',{callback:(v)=>console.log(v)}) option callback
---help帮助选项默认打开. 通过调用.removeHelpOption()关闭或者使用.customHelp()来自定义.---V|version版本选项默认没有,通过.setVersion(v:string)会自动创建.