Kitura

APIDoc Build Status - Master macOS Linux Apache 2 Slack Status

配置

Configuration 是一个 Swift 包,用于管理应用程序配置。 使用 Configuration,应用程序可以轻松地从多个来源加载和合并配置数据,并从一个中央配置存储库访问它们。

Configuration 支持将配置键作为路径。 也就是说,键是以 [父级]<分隔符>[子级] 语法编写的合格路径选择器。 这允许应用程序检索任何特定级别的配置对象。

版本

最新版本的 Configuration (v3.x.x) 在 Swift 5.2 及更高版本上运行,支持 macOS 和 Ubuntu Linux。

用法

添加依赖项

Configuration 添加到应用程序 Package.swift 文件中的依赖项。 将 "x.x.x" 替换为最新的 Configuration 版本

.package(url: "https://github.com/Kitura/Configuration.git", from: "x.x.x")

Configuration 添加到你的目标的依赖项中

.target(name: "example", dependencies: ["Configuration"]),

初始化配置

Configuration 包的核心是 ConfigurationManager 类。 要管理应用程序的配置,首先要创建 ConfigurationManager 类的一个实例。

import Configuration

let manager = ConfigurationManager()

使用 ConfigurationManager 实例,可以加载和检索配置

manager.load(file: "config.json").load(.environmentVariables)
let value = manager["path:to:configuration:value"]

加载配置数据

Configuration 有很多方法可以加载配置数据。

注意: 在所有情况下,配置键路径都区分大小写。

从原始 Any 对象

manager.load([
    "hello": "world",
    "foo": [
        "bar": "baz"
    ]
])

从命令行参数

manager.load(.commandLineArguments)

要在运行时通过命令行注入配置,请在启动可执行文件时设置配置值,如下所示

./myApp --path.to.configuration=value

在实例化 ConfigurationManager 时,您可以设置你喜欢的参数前缀(默认为 --)和路径分隔符(默认为 .)字符串。

从环境变量

manager.load(.environmentVariables)

然后,要在你的应用程序中使用它,请设置环境变量,如下所示

PATH__TO__CONFIGURATION=value

在实例化 ConfigurationManager 时,您可以设置你喜欢的路径分隔符(默认为 __)字符串。

Data 对象

let data = Data(...)
manager.load(data: data)

从文件

manager.load(file: "/path/to/file")

默认情况下,file 参数是相对于可执行文件位置的路径(即,.build/debug/myApp);如果 file 是绝对路径,那么它将被视为绝对路径。 您可以使用可选的 relativeFrom 参数更改相对路径的起始位置,如下所示

// Resolve path against PWD
manager.load(file: "../path/to/file", relativeFrom: .pwd)

// or

// Resolve path against a custom path
manager.load(file: "../path/to/file", relativeFrom: .customPath("/path/to/somewhere/on/file/system"))

注意: 如果应用程序是从 Xcode 内部运行的,则以下 relativeFrom 选项,.executable(默认)和 .pwd,将引用不同的文件系统位置,如果应用程序是从命令行运行的,则也是如此。 您可以在你的 xcodeproj 中设置一个编译器标志,例如 -DXCODE,并使用该标志来更改你的配置文件加载逻辑。

注意: 因为 BasePath.project 取决于可执行文件的父文件夹中的某个位置是否存在 Package.swift 文件,所以不支持使用 swift build --build-path 更改其位置。

URL

let url = URL(...)
manager.load(url: url)

注意: URL 必须包含一个方案,即 file://http:// 等。

从多个来源

您可以链接这些方法来一次性从多个来源加载配置数据。 如果同一配置键存在于多个来源中,则最近加载的配置键将覆盖较早加载的配置键。 在这个简单的例子中,

manager.load(["foo": "bar"]).load(["foo": "baz"])

foo 的值现在是 baz,因为 ["foo": "baz"]["foo": "bar"] 更晚加载。 同样的行为适用于所有其他的 load 函数。

注意: 目前,Configuration 仅支持从 Data、文件或 URL 加载的资源的 JSON 和 PLIST 格式。 您可以编写一个 自定义反序列化器 来解析其他格式。

访问配置数据

要在加载配置值之后获取单个配置值,请使用

manager["path:to:configuration"]

配置存储库表示为一棵树,其中键中的路径元素由冒号 (:) 分隔。 例如,键 VCAP_SERVICES:cloudantNoSQLDB:0:credentials:host 将遍历到 VCAP_SERVICEScloudantNoSQLDB、数组索引 0、credentials,然后是 host 以获取值。 这是一个 JSON 示例,展示了该结构

{
    "VCAP_SERVICES": {
        "cloudantNoSQLDB": [
            {
                "credentials": {
                    "host": <value-goes-here>
                }
            }
        ]
    }
}

返回的值类型为 Any?。 因此,将该值转换为你想使用的类型非常重要。 例如

let stringValue = manager["VCAP_SERVICES:cloudantNoSQLDB:0:credentials:host"] as? String

你也可以通过部分路径检索配置对象;例如,如果你使用 manager["VCAP_SERVICES:cloudantNoSQLDB:0:credentials"],结果将是 credentials 中键值对的字典。

要获取配置存储库中的所有配置值,请使用

manager.getConfigs()

返回值是当前配置存储库中所有配置值的原始表示。

鸣谢

Configuration 的灵感来自 nconf,一个流行的 NodeJS 分层配置管理器。

API 文档

有关更多信息,请访问我们的 API 参考

许可证

此库在 Apache 2.0 许可下发布。 完整的许可证文本可在 LICENSE 中找到。