载入外部配置数据
tiny3 Example
在本节中,通过引入 hedzr/cmdr-loaders,将会采用一个较为冗长的示例程序来展示如何逐步地整合配置管理并加载外部配置文件的能力。
下面的示例程序是一个较为冗长的版本,
在 hedzr/cmdr-tests
的根目录中包含一个名为 tiny3-app.toml
的配置数据文件:
它将被 tiny3 在执行时装入。我们可以借助于 --full
打印的配置数据树观察到这个功能是正常工作的:
注意到高亮行显示了 app.tiny3.foo
的键值被正确加载了。
自动搜索配置文件夹
hedzr/cmdr-loaders 提供符合 GNU Folder Spec, UNIX Filesystem Conventions (wiki) 以及 Filesystem Hierarchy Standard (wiki)。
因此,cmdr & cmdr-loaders 将会自动搜索诸如
Primary
:/etc/<app-name>
Secondary
:$HOME/.config/<app-name>
Alternative(s)
:.
and<exeutable-dir>
这些文件夹来查找 <app-name>.toml
是否存在。
如果找到了(例如本例中的 tiny3-app.toml
),那就载入其中的数据集。
然后,如果这是 Primary
和 Secondary
配置集,那就检查该文件夹中是否有 conf.d
子文件夹,
如果有,自动装载这个子文件夹中的全部配置文件。
hedzr/cmdr-loaders
识别多种文件名后缀并正确装载它们,包括:
- .toml
- .yaml, .yml
- .json
- .hjson
- .hcl
- .nestedtext, .txt, .conf
你甚至可以同时混用它们。
自动回写变更集合
对于 Alternative
配置集,我们还支持自动回写的功能:当应用程序结束时,自动将内存中的配置数据集的变更条目写入到 Alternative 配置文件中。
默认地,仅有当前工作目录中的 <app-name>.{toml,yaml,...}
才属于 Alternative
配置集,它才支持自动回写功能。
注意:<exeutable-dir>
的 Alternative 配置文件不支持回写功能。
自动环境变量绑定
当使用 local.NewEnvVarLoader()
这个 loader 时,它将会处理自动环境变量到命令行选项参数的绑定。
所谓自动环境变量,是指 APP_xxx
这样的环境变量名字。
如果自动绑定功能启用,那么像 APP_JUMP_FULL=1
这样的环境变量值会被
赋予 jump
命令的 full
参数选项,从而起到 app jump --full to
这个命令行的等价效果,对应的命令行可以是 APP_JUMP_FULL=1 app jump to
。
那么孰优孰劣呢?这就很难讲了,负责 DevOps 的人或许会有自己的看法。
没有启用时怎么办
通常情况下,你可以为一个参数选项显式地做环境变量绑定,如同这样:
所以你也可以不必启用自动环境变量的绑定能力。
内置的 jsonLoader
事实上 cmdr.v2
内置了一个超级微型的 json loader,所以即使你没有通过 hedzr/cmdr-loaders
来搜索外部配置文件和加载它们,也仍然能够至少载入一个 JSON 格式的配置文件。
这个 jsonLoader
将会尝试载入当前目录下的 .<app>.json
或者 <app>.json
配置文件。以 examples/tiny/lite
app 为例,它将会尝试加载 lite-app.json
,其参考内容如下:
加载后相应的子项为:
之所以是 JSON 格式而非 TOML 或者其他,这是因为如此我们才能避免在 cmdr.v2 core 中引入额外的第三方包作为依赖。
实际上你完全可以借助于 hedzr/store
所提供的 providers 以及 codecs,自行实现 hedzr/cmdr-loaders
中所包含的全部功能。
:end:
How is this guide?
Last updated on