Commando's¶
Vapor's Command API staat u toe om aangepaste command-line functies te bouwen en te communiceren met de terminal. Het is waar Vapor's standaard commando's zoals serve
, routes
, en migrate
op gebouwd zijn.
Standaard Commando's¶
U kunt meer te weten komen over de standaard commando's van Vapor door de --help
optie te gebruiken.
swift run App --help
Je kunt --help
gebruiken voor een specifiek commando om te zien welke argumenten en opties het accepteert.
swift run App serve --help
Xcode¶
U kunt in Xcode commando's uitvoeren door argumenten toe te voegen aan het App
schema. Om dit te doen volgt u deze stappen:
- Kies
App
schema (rechts van de play/stop knoppen) - Klik op "Edit Scheme"
- Kies "App" product
- Selecteer het tabblad "Arguments"
- Voeg de naam van het commando toe aan "Arguments Passed On Launch" (d.w.z.
serve
)
Aangepaste Commando's¶
Je kunt je eigen commando's maken door types te maken die voldoen aan AsyncCommand
.
import Vapor
struct HelloCommand: AsyncCommand {
...
}
Het toevoegen van het aangepaste commando aan app.asyncCommands
maakt het beschikbaar via swift run
.
app.asyncCommands.use(HelloCommand(), as: "hello")
Om te voldoen aan AsyncCommand
, moet je de run
methode implementeren. Dit vereist het declareren van een Signature
. Je moet ook een standaard helptekst opgeven.
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!")
}
}
Dit eenvoudige commando voorbeeld heeft geen argumenten of opties, dus laat de handtekening leeg.
Je kunt toegang krijgen tot de huidige console via de meegeleverde context. Console heeft veel handige methodes voor het vragen van gebruikersinvoer, uitvoeropmaak, en meer.
let name = context.console.ask("What is your \("name", color: .blue)?")
context.console.print("Hello, \(name) 👋")
Test je commando door het volgende uit te voeren:
swift run App hello
Cowsay¶
Kijk eens naar deze re-creatie van het beroemde cowsay
commando voor een voorbeeld van het gebruik van @Argument
en @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)
}
}
Probeer dit toe te voegen aan je applicatie en het uit te voeren.
app.asyncCommands.use(Cowsay(), as: "cowsay")
swift run App cowsay sup --eyes ^^ --tongue "U "