我想知道是否可以在执行命令之前验证标志值。
healthCheckPort: Flags.integer({
description: 'This flag allows you to choose what port the health check sever is running on.',
default: 6000,
dependsOn: ['healthCheck'],
}),
您可以通过提供逻辑“解析器”来做到这一点
请参阅
parse
选项此处
工作示例:
要求:有一个
--options
标志,其中要求具有格式为 <string>=<string>,
的字符串 - 有效示例:foo=bar
或 foo=bar,hello=world
或 foo=bar,
或 foo=bar,hello=world,num=100
指定标志:
options: Flags.string({
char: 'o',
required: false,
description: 'These are query string parameters send in your request, must be of the format : param=value1,param2=value2',
parse: async input => validateOptions(input)
}),
将
validateOptions
写为:
/**
*
* @param providedOptions - format : abc=def,foo=bar,num=199
* @returns providedOptions if the input matches the requirements
*/
export function validateOptions(providedOptions:string):string {
let providedOptionList:string[] = providedOptions.split(',')
providedOptionList.forEach((providedOption) => {
if (!providedOption.match(/(\w.*)=(\w.*)/)) {
throw new Error(`${providedOption} : does not match requirements, see --help`)
}
})
// return the same value after validation ; you may also mutate the value if you need to
return providedOptions
}
如您所见,这将在执行任何操作之前使用用户定义的
validateOptions
调用 input
。
参见示例:
<your bin> <your arg> <your commands> --options abc=1234,def=123,num=
这返回:
Error: Parsing --options
num= : does not match requirements, see --help
<error trace>
我正在一个项目中使用这种方法来验证给定的标志输入是否是有效的 IP 地址