与语言无关的配置文件格式

l0b*_*0b0 7 configuration

如今,许多项目使用不止一种编程/脚本语言,在标准的DRY传统中,如果它们需要相同的信息,它们不应该有单独的配置文件。经过在 中的一个小调查/etc,看起来在 Ubuntu 中使用了很多不兼容的语法:

  • varname=value —— /etc/adduser.conf
  • varname: value —— /etc/debconf.conf
  • varname = value —— /etc/deluser.conf
  • $varname value /etc/insserv.conf
  • varname value —— /etc/login.defs
  • set varname value —— /etc/lftp.conf
  • [section]
        varname = value
    
    Run Code Online (Sandbox Code Playgroud)

    /etc/mke2fs.conf

  • section
        label varname value
        set varname value
    
    Run Code Online (Sandbox Code Playgroud)

    /etc/smartd.conf

据我所知,这些都不是“ Yaml、XML 或 JSON ”(但其中之一是INI)。对于需要提供简单值 ( debug = true, welcome = "Hello world!", threads = 4)、简单值数组 ( servers = [dev, test, prod]) 以及引用其他变量 ( thread_msg = "Using $threads threads") 到BashPerlPHP 的值的项目,您会推荐哪种格式(以及为什么)?

xen*_*ide 3

前 3 种是序列化格式,不是配置格式。这些格式对于机器来说很容易读写,但对于人类来说却不那么容易读写。不要它们用于配置。您的用户可能会因此讨厌您。

此外,其中一些文件只是NAME value成对的。其他文件可能不是真正的配置文件,而是 shell 文件,这意味着它们基本上可以由 shell 获取以进行处理。

我建议使用实际的配置格式,如 INI 或 Apache Style(Config::General在 Perl 中)

Config::Any是加载配置的 perl 模块的一个不错的选择,因为它允许用户本质上选择他们选择的格式。