命令参数
参数指的是命令名称之后提到的位置参数。由于参数是位置性的,因此必须以正确的顺序传递它们。
你必须将命令参数定义为类属性,并使用 args
装饰器进行装饰。参数将按照它们在类中定义的顺序被接受。
在下面的示例中,我们使用 @args.string
装饰器来定义一个接受字符串值的参数。
import { BaseCommand, args, flags } from '@adonisjs/core/ace'
export default class GreetCommand extends BaseCommand {
static commandName = 'greet'
static description = '通过名字问候用户'
@args.string()
declare name: string
run() {
console.log(this.name)
}
}
要在同一个参数名称下接受多个值,你可以使用 @args.spread
装饰器。请注意,扩展参数必须是最后一个。
import { BaseCommand, args, flags } from '@adonisjs/core/ace'
export default class GreetCommand extends BaseCommand {
static commandName = 'greet'
static description = '通过名字问候用户'
@args.spread()
declare names: string[]
run() {
console.log(this.names)
}
}
参数名称和描述
参数名称会显示在帮助屏幕上。默认情况下,参数名称是类属性名称的短横线连接形式。不过,你也可以定义一个自定义值。
@args.string({
argumentName: 'user-name'
})
declare name: string
参数描述会显示在帮助屏幕上,可以通过 description
选项来设置。
@args.string({
argumentName: 'user-name',
description: '用户的名字'
})
declare name: string
带有默认值的可选参数
默认情况下,所有参数都是必需的。但是,你可以通过将 required
选项设置为 false
来使它们变为可选参数。可选参数必须放在最后。
@args.string({
description: '用户的名字',
required: false,
})
declare name?: string
你可以使用 default
属性来设置可选参数的默认值。
@args.string({
description: '用户的名字',
required: false,
default: 'guest'
})
declare name: string
处理参数值
使用 parse
方法,你可以在参数值被定义为类属性之前对其进行处理。
@args.string({
argumentName: 'user-name',
description: '用户的名字',
parse (value) {
return value ? value.toUpperCase() : value
}
})
declare name: string
访问所有参数
你可以使用 this.parsed.args
属性来访问运行命令时提到的所有参数。
import { BaseCommand, args, flags } from '@adonisjs/core/ace'
export default class GreetCommand extends BaseCommand {
static commandName = 'greet'
static description = '通过名字问候用户'
@args.string()
declare name: string
run() {
console.log(this.parsed.args)
}
}