所以我有几个命令,它们都使用相同的选项。
例如......
program.command('hello')
.option('--foo <name>', 'this is the foo option and requires a name')
.option('--bar', 'this is the bar option and takes no arguments')
.action(options => {
// do stuff here...
});
program.command('world')
.option('--foo <name>', 'this is the foo option and requires a name')
.option('--bar', 'this is the bar option and takes no arguments')
.action(options => {
// do stuff here...
});
我想重构一下并定义一次选项。但是,对每个命令采取的操作可能不同。
有没有办法声明一次选项并将它们用于定义的任何/所有命令?
答案 0 :(得分:1)
您可以构建您的共享命令,然后您可以向其中添加特定配置。
初始化您的共享项目:
const createCommandWithSharedOptions = () => new program.Command()
.option('--foo <name>', 'this is the foo option and requires a name')
.option('--bar', 'this is the bar option and takes no arguments')
根据共享的 init 定义您的自定义命令:
const hello = createCommandWithSharedOptions().name('hello').arguments('<req> [opt]')
const world = createCommandWithSharedOptions().name('world')
将它们添加到 program
:
program.addCommand(hello).addCommand(world)
答案 1 :(得分:0)
我提出的解决方案仅适用于具有相同选项的命令。要使用独特的选项,您可能必须扩展我找到的解决方案,或者也许还有其他方法。
我想出了什么:
[
{
name: 'hello',
method: 'hiMethod'
},
{
name: 'world',
method: 'woMethod',
},
].forEach(cmd => {
program.command(cmd.name)
.option('--foo <name>', 'this is the foo option and requires a name')
.option('--bar', 'this is the bar option and takes no arguments')
.action(options => {
// do stuff here...
// I can use `cmd.method` for unique actions for each command
});
});
此解决方案对我有用:)