Comandi¶
L'API Command di Vapor ti permette di creare funzioni a riga di comando personalizzate e interagire con il terminale. È su questa API che sono costruiti i comandi predefiniti di Vapor come serve, routes e migrate.
Comandi Predefiniti¶
Puoi saperne di più sui comandi predefiniti di Vapor usando l'opzione --help.
swift run App --help
Puoi usare --help su un comando specifico per vedere quali argomenti e opzioni accetta.
swift run App serve --help
Xcode¶
Puoi eseguire comandi in Xcode aggiungendo argomenti allo schema App. Per farlo, segui questi passaggi:
- Scegli lo schema
App(a destra dei pulsanti play/stop) - Clicca su "Edit Scheme"
- Scegli il prodotto "App"
- Seleziona la scheda "Arguments"
- Aggiungi il nome del comando in "Arguments Passed On Launch" (es.
serve)
Comandi Personalizzati¶
Puoi creare i tuoi comandi creando tipi conformi a AsyncCommand.
import Vapor
struct HelloCommand: AsyncCommand {
...
}
Aggiungere il comando personalizzato a app.asyncCommands lo renderà disponibile tramite swift run.
app.asyncCommands.use(HelloCommand(), as: "hello")
Per essere conforme ad AsyncCommand, devi implementare il metodo run. Questo richiede la dichiarazione di una Signature. Devi anche fornire un testo di aiuto predefinito.
import Vapor
struct HelloCommand: AsyncCommand {
struct Signature: CommandSignature { }
var help: String {
"Says hello"
}
func run(using context: CommandContext, signature: Signature) async throws {
context.console.print("Hello, world!")
}
}
Questo semplice comando di esempio non ha argomenti né opzioni, quindi lascia la firma vuota.
Puoi accedere alla console corrente tramite il context fornito. Console ha molti metodi utili per richiedere input all'utente, formattare l'output e altro ancora.
let name = context.console.ask("What is your \("name", color: .blue)?")
context.console.print("Hello, \(name) 👋")
Testa il tuo comando eseguendo:
swift run App hello
Cowsay¶
Dai un'occhiata a questa reimplementazione del famoso comando cowsay per un esempio di utilizzo di @Argument e @Option.
import Vapor
struct Cowsay: AsyncCommand {
struct Signature: CommandSignature {
@Argument(name: "message")
var message: String
@Option(name: "eyes", short: "e")
var eyes: String?
@Option(name: "tongue", short: "t")
var tongue: String?
}
var help: String {
"Generates ASCII picture of a cow with a message."
}
func run(using context: CommandContext, signature: Signature) async throws {
let eyes = signature.eyes ?? "oo"
let tongue = signature.tongue ?? " "
let cow = #"""
< $M >
\ ^__^
\ ($E)\_______
(__)\ )\/\
$T ||----w |
|| ||
"""#.replacingOccurrences(of: "$M", with: signature.message)
.replacingOccurrences(of: "$E", with: eyes)
.replacingOccurrences(of: "$T", with: tongue)
context.console.print(cow)
}
}
Prova ad aggiungerlo alla tua applicazione ed eseguirlo.
app.asyncCommands.use(Cowsay(), as: "cowsay")
swift run App cowsay sup --eyes ^^ --tongue "U "