命令参数
命令参数使用 @args 装饰器定义,并作为命令类的实例属性可用。装饰器必须应用于实例属性,不接受任何参数。
您可以运行 node ace <command-name> --help 命令来查看接受的参数列表及其描述。
ts
import { BaseCommand, args } 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
async run() {
this.logger.info(`Hello, ${this.name}!`)
}
}参数类型
String
@args.string 参数接受字符串值。默认情况下,参数是必需的;您必须将参数标记为可选以接受没有值的参数。
ts
@args.string()
declare name: stringSpread
@args.spread 参数接受多个值并将它们作为字符串数组传递给命令。spread 参数必须在其他参数之后定义。
ts
@args.spread()
declare files: string[]参数名称和描述
参数名称从类属性名称推断。但是,如果需要,您可以在装饰器选项中定义自定义名称和描述。
ts
import { BaseCommand, args } from '@adonisjs/core/ace'
export default class GreetCommand extends BaseCommand {
static commandName = 'greet'
static description = 'Greet a user by name'
@args.string({ argumentName: 'user-name', description: 'The name of the user' })
declare name: string
}可选参数
默认情况下,所有参数都是必需的。但是,您可以在装饰器选项中将参数标记为可选。
TIP
确保可选参数在必需参数之后定义。
ts
import { BaseCommand, args } from '@adonisjs/core/ace'
export default class GreetCommand extends BaseCommand {
static commandName = 'greet'
static description = 'Greet a user by name'
@args.string({ required: false })
declare name?: string
}定义默认值
当参数是可选的时,您可以为其定义默认值。默认值显示在帮助输出中。
ts
import { BaseCommand, args } from '@adonisjs/core/ace'
export default class GreetCommand extends BaseCommand {
static commandName = 'greet'
static description = 'Greet a user by name'
@args.string({ required: false, default: 'Guest' })
declare name: string
}处理参数值
您可以使用 parse 方法修改/转换参数值,然后将其设置为类属性。传递给 parse 方法的值始终是字符串。
ts
import { BaseCommand, args } from '@adonisjs/core/ace'
export default class GreetCommand extends BaseCommand {
static commandName = 'greet'
@args.string({
parse(value) {
return value ? value.toUpperCase() : value
},
})
declare name: string
}访问所有参数
您可以使用 this.parsed.args 属性访问所有参数。该属性是一个字符串数组,包含原始参数值。
ts
import { BaseCommand, args } from '@adonisjs/core/ace'
export default class GreetCommand extends BaseCommand {
static commandName = 'greet'
@args.string()
declare name: string
async run() {
console.log(this.parsed.args)
}
}