除了由Vapor提供的命令(如服务(server
)和路由(routes
)),您还可以构建自己的自定义命令。
笔记
命令是使用定时任务(CRON jobs)来编写应用程序的一种很好的方式。
例子(Example)
要创建一个自定义控制台命令,我们必须首先创建一个新的.swift
文件,导入Vapor
和控制台(Console
),并实现命令(Command
)协议。
import Vapor
import Console
final class MyCustomCommand: Command {
public let id = "my-command"
public let help = ["This command does things, like foo, and bar."]
public let console: ConsoleProtocol
public init(console: ConsoleProtocol) {
self.console = console
}
public func run(arguments: [String]) throws {
console.print("running custom command...")
}
}
-
id属性是您将在控制台中输入的字符串,以访问命令。
.build/debug/App command
将运行定制命令。 - help属性是帮助消息,它将给您的定制命令的用户一些关于如何访问它的命令。
- console(控制台)属性是传递到您的自定义命令的对象,它遵循控制台协议,允许操纵控制台。
- run方法是将与您的命令相关的逻辑放在哪里。
配置初始化(Config Initializable)
为了使我们的命令可配置,将它与ConfigInitializable
相一致。
extension MyCustomCommand: ConfigInitializable {
public convenience init(config: Config) throws {
let console = try config.resolveConsole()
self.init(console: console)
}
}
添加到Droplet(Add to Droplet)
在定制命令文件中工作之后,我们切换到我们的main.swift
文件,并将定制命令添加到这样的Droplet中。
import Vapor
let config = try Config()
try config.addConfigurable(command: MyCustomCommand.init, name: "my-command")
let drop = try Droplet(config)
这允许Vapor访问我们的自定义命令,并让它知道在程序的--help
部分显示它。
配置(Configure)
现在您已经将命令配置为可配置,只需将其添加到您的Config/droplet.json
文件中的commands
数组中。
Config/droplet.json
{
...,
"commands": ["my-command"],
...,
}
编译完应用程序后,我们可以像这样运行我们的自定义命令。
vapor run my-command