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