问题描述
commander 和 yargs 都使用让人联想到 jQuery 的链接语法。
尝试决定是否使用我喜欢的语法编写包装器。
指挥官:
program
.option('-d,--debug','output extra debugging')
.option('-s,--small','small pizza size')
.option('-p,--pizza-type <type>','flavour of pizza');
program.parse(process.argv);
yargs:
yargs(hideBin(process.argv))
.command('serve [port]','start the server',(yargs) => {
yargs
.positional('port',{
describe: 'port to bind on',default: 5000
})
},(argv) => {
if (argv.verbose) console.info(`start server on :${argv.port}`)
serve(argv.port)
})
.option('verbose',{
alias: 'v',type: 'boolean',description: 'Run with verbose logging'
})
.argv
例如,他们可以接受一个大型配置对象,这似乎更符合习惯:
parse({
options: {
debug: {
description: 'output extra debugging',alias: 'd'
},small: {
description: 'small pizza size',alias: 's'
},['pizza-type']: {
description: 'flavour of pizza',alias: 'p'
},}
})
解决方法
这种方法的名字是 fluent interface
并且众所周知,因为它简化了对同一对象的一堆方法的调用。
Martin Fowler 在 jQuery
出现之前提到了这种方法。见Fluent interface
例如,将 C# 中的 LINQ 视为流畅接口原则的强大实现。