命令标志
命令标志使用 @flags 装饰器定义,并作为命令类的实例属性可用。装饰器必须应用于实例属性。
您可以运行 node ace <command-name> --help 命令来查看接受的标志列表及其描述。
ts
import { BaseCommand, flags } from '@adonisjs/core/ace'
export default class GreetCommand extends BaseCommand {
static commandName = 'greet'
static description = 'Greet a user by name'
@flags.boolean()
declare greeting: boolean
async run() {
this.logger.info(`Greet with formal greeting?: ${this.greeting}`)
}
}标志类型
Boolean
@flags.boolean 标志不接受值。定义标志使其生效(设置为 true)。但是,您可以将值设为 false 通过使用 --no- 前缀。例如:
sh
# greeting = true
node ace greet --greeting
# greeting = false
node ace greet --no-greetingts
@flags.boolean()
declare greeting: booleanString
@flags.string 标志接受字符串值。
sh
# format = json
node ace greet --format=json
# format = json
node ace greet --format jsonts
@flags.string()
declare format: stringNumber
@flags.number 标志接受数值。
sh
# limit = 10
node ace greet --limit=10
# limit = 10
node ace greet --limit 10ts
@flags.number()
declare limit: numberArray
@flags.array 标志接受多个值。
sh
# files = ['file1.txt', 'file2.txt']
node ace greet --files=file1.txt --files=file2.txt
# files = ['file1.txt', 'file2.txt']
node ace greet --files file1.txt --files file2.txtts
@flags.array()
declare files: string[]标志名称和描述
标志名称从类属性名称推断。但是,如果需要,您可以在装饰器选项中定义自定义名称和描述。
ts
import { BaseCommand, flags } from '@adonisjs/core/ace'
export default class GreetCommand extends BaseCommand {
static commandName = 'greet'
static description = 'Greet a user by name'
@flags.string({ flagName: 'output-format', description: 'The output format for the command' })
declare format: string
}标志别名
标志可以有别名。别名必须是单字符字符串,使用单个连字符定义。
ts
import { BaseCommand, flags } from '@adonisjs/core/ace'
export default class GreetCommand extends BaseCommand {
static commandName = 'greet'
static description = 'Greet a user by name'
@flags.string({ alias: 'f' })
declare format: string
}sh
# format = json
node ace greet -f=json
node ace greet -f json定义默认值
您可以使用装饰器选项为标志定义默认值。默认值显示在帮助输出中。
ts
import { BaseCommand, flags } from '@adonisjs/core/ace'
export default class GreetCommand extends BaseCommand {
static commandName = 'greet'
static description = 'Greet a user by name'
@flags.string({ default: 'json' })
declare format: string
}处理标志值
您可以使用 parse 方法在设置为类属性之前修改/转换标志值。传递给 parse 方法的值始终是字符串。
ts
import { BaseCommand, flags } from '@adonisjs/core/ace'
export default class GreetCommand extends BaseCommand {
static commandName = 'greet'
@flags.string({
parse(value) {
return value ? value.toLowerCase() : value
},
})
declare format: string
}访问所有标志
您可以使用 this.parsed.flags 属性访问所有标志。该属性是一个对象,包含标志名称(键)及其值(值)。
此外,您可以使用 this.parsed.unknownFlags 对象访问用户传递但命令未定义的未知标志。
ts
import { BaseCommand, flags } from '@adonisjs/core/ace'
export default class GreetCommand extends BaseCommand {
static commandName = 'greet'
@flags.string()
declare format: string
async run() {
console.log(this.parsed.flags)
console.log(this.parsed.unknownFlags)
}
}