首页 > 其他分享 >【配置文件】toml 配置文件的介绍以及使用

【配置文件】toml 配置文件的介绍以及使用

时间:2025-01-04 22:55:34浏览次数:1  
标签:配置文件 配置 介绍 TOML toml 字符串 键值

在开发中,我们经常使用各种配置文件,通常会使用ini,json,xml,yaml,toml,properties, env等。

ini - 一种简单的配置文件格式,使用section和键值对来存储数据。

json(JavaScript Object Notation) - 轻量级数据交换格式,易于人阅读和编写。

xml(eXtensible Markup Language) - 一种标记语言,用于存储和传输数据,具有严格的结构和子描述性。

yaml(YAML Ain't Markup Language) - 一种人类可读的数据序列化格式。

toml(Tom's Obvious, Minimal Language) - 一种轻量级的数据配置文件格式。

properties - 一种简单的键值对配置格式,常用于java。

env - 一种简单的环境变量配置格式。我们在 nodejs里的dotenv - 管理好应用的配置 这篇文章里面有过介绍,感兴趣可以看看。

TOML介绍

今天介绍的是toml这个算是比较新兴的配置格式。
TOML = Tom's Obvious, Minimal Language
作者是 Tom Preston-Werner 等
toml的目标是成为一个语义明显且易于阅读的最小化配置文件格式。
由于其精确的语义,使得这种格式易于阅读。它被设计成可以无歧义地映射到散列表,因此应该能很容易地被解析成各种语言中的数据结构。

TOML 语法简介

TOML 是大小写敏感的。
TOML 文件必须是合法的UTF-8编码的Unicode文档。

空白是指制表符(0x09)或空格(0x20)。

换行是指LF(0x0A)CRLF(0x0D 0x0A)

使用 # 字符将该行余下的部分标记为注释,除非它在字符串中。

# 这是注释
secret="AFAFE" # 这是注释
password="EF#这不是注释" 

键值对是TOML文档最基本的构成区块。键名中等号的左边而值在右边。键名和键值周围的空白会被忽略,键、等号和值必须在同一行。不指定值是非法的。

key = "value"
invalid = # 这是非法的
= "no key name" # 没有键名,这是非法的

键名使用点分隔键可以将相近的属性放在一起:

name = "Apple"
props.color = "Red"
props.size = "Big"
price = 20.50

等价于JSON:

{
  "name": "Apple",
  "props": {
    "color": "Red",
    "size": "Big"
  },
  "price": 20.50
}

值必须是下述类型之一:
1.字符串


str = "这是字符串, \"引号需要转义\"" # 由引号"包裹

# 由三个引号包裹,允许折行
str = """
这是字符串,
这是字符串2."""

# 等价于
str = "这是字符串,\n这是字符串2."

单引号包裹或者三个单引号包裹的字符串没有转义。
2.整数、浮点数和布尔值

key1 = 12
key2 = -18
key3 = 0
key4 = 05 # 非法
hex1 = 0xDEAD # 0x 前缀的16进制
oct1 = 0o234 # 0o 前缀的8进制
bin1 = 0b11001 # 0b 前缀的2进制

key1 = 1.0
key2 = -0.01
key3 = .7 # 非法
key4 = 7. # 非法
key5 = inf # 无穷

key1 = true
key2 = false

3.日期时刻
可以使用指定了时区偏移量的 RFC 3339 格式的日期时刻.

date1 = 2024-12-19T17:32:00Z
date2 = 2024-12-19 17:32:00Z # 使用空格替换T
date3 = 2024-12-19T17:32:00 # 省略时区偏移量
date4 = 2024-12-19 # 日期
date5 = 08:30:00 # 时间

4.数组
数组是内含值的方括号,子元素有逗号分隔。可以混合不同的类型值。

arr1 = [1, 2, 3]
colors = ["红", "绿", "黄"]
arr2 = [
  "Example",
  { name = "Tom", phone = "88888888" }
]

5.表(哈希表或字典)
表说键值对的集合,由表头定义,连同方括号作为单独的行出现。在它下方直到下一个表头或文件结束,都是这个表的键值对。

[table1]
key1 = "value1"
key2 = 1234

等价于下面的JSON:

{ "table1": { "key1"; "value1", "key2": 1234 } }

应用例子

下面介绍一下在nodejs下怎样使用toml文件格式作为配置文件。
首先安装toml依赖,用于解析toml文件:

yarn add toml

然后添加一个toml配置文件 server.toml:

[server]
host = ""
port = 3000
basePath = ''
behindProxy = false

接着就可以这个js里面解析该配置了:

import fs from 'node:fs';
import toml from 'toml';

class ConfigParser {
  constructor() {
    this.config = {};
  }
  getConfig() {
    return this.config;
  }
  parseFile() {
    try {
      const tomlFile = fs.readFileSync('server.toml', 'utf8');
      Object.assign(this.config, toml.parse(tomlFile));
    } catch (error) {
      throw new Error('Parsing file failed ' + error);
    }
  }
}

const configParser = new ConfigParser();
configParser.parseFile();
const config = configParser.getConfig();
console.log(config);

运行这个js,可以看到打印出来的正是server.toml的内容,以object的形式呈现:

$ node demo.js 

{
  server: [Object: null prototype] {
    host: '',
    port: 3000,
    basePath: '',
    behindProxy: false
  }
}

最佳实践

使用toml(或者yaml,json)来做应用的默认配置以及配置定义,即应用启动的最小配置集。

使用.env 来给不同环境/不同人员做个性化配置。使用环境变量 processs.env 来做运行时覆盖。

References

https://toml.io/cn/
https://github.com/toml-lang/toml

原创 蓝天白云喵 喵舍宝典

标签:配置文件,配置,介绍,TOML,toml,字符串,键值
From: https://www.cnblogs.com/o-O-oO/p/18652647

相关文章

  • Emacs 中的缓冲区(Buffer)介绍
    Emacs中的缓冲区(Buffer)在Emacs中,缓冲区(buffer)是一个核心概念,表示Emacs内部用于处理和显示文本的“工作区域”。每个打开的文件、运行的命令、显示的消息、终端会话等都被分配到一个独立的缓冲区。缓冲区的特点不局限于文件:缓冲区不一定与文件相关联。它可以是用......
  • 库卡机器人KR 1000减速机维修故障详情介绍
    一、库卡机器人KR1000减速机故障类型与原因磨损与疲劳:长时间的使用和负载可能导致减速机内部齿轮、轴承等部件的磨损和疲劳。密封失效:库卡机器人KR1000减速机的密封件如果老化或损坏,会导致润滑油泄漏和污染物侵入,进而引发故障。过载:机器人承受超出其设计范围的负载,会导致库卡......
  • Git介绍
    Git是一种功能强大的分布式版本控制系统,广泛应用于软件开发领域。1.基本概念1.1仓库(Repository)本地仓库:存储在开发者本地计算机上的代码库,通过gitinit初始化。远程仓库:存储在服务器上的代码库(如GitHub、GitLab、Bitbucket等),方便团队协作。1.2分支(Branch)分支是Gi......
  • ts配置文件中 "noEmit": true, 的作用
    在TypeScript的配置文件(通常是tsconfig.json)中,"noEmit":true是一个编译选项,用于控制TypeScript编译器的行为。具体来说,这个选项的作用是告诉编译器不生成任何输出文件,即不会将TypeScript文件编译成JavaScript文件或声明文件。详细解释默认行为:当"noEmit"设置为f......
  • JavaScript介绍
    JavaScript是一种高级的、解释型的编程语言,在网页开发和许多其他应用场景中发挥着关键作用。一、起源与发展JavaScript诞生于1995年,由Netscape公司的BrendanEich开发。最初它的设计目的是为了让网页能够具有交互性,能够在浏览器端进行一些简单的表单验证、动画效果等操作......
  • 【从零开始入门unity游戏开发之——unity篇04】unity6基础入门——场景窗口(Scene)和层
    文章目录场景窗口(Scene)和层级窗口(Hierarchy)一、层级窗口(`Hierarchy`)1、添加新的对象(物体)2、`Hierarchy`层级窗口快捷键3、搜索二、Scene场景窗口1、工具栏控制台2、操作物体位置角度和缩放工具栏(1)平移(2)移动(3)旋转(4)缩放(5)矩形工具(6)综合(7)编辑碰撞体积3、窗口上方工具条内......
  • 【反爬虫】接口安全的风控介绍
    #风控#接口信息安全#业务线一、接口反爬背景二、反爬数据流框架介绍2.1数据接入风控2.2风险感知和策略迭代2.2.1短线近实时监控告警2.2.2风控策略部署2.3异常流量处置能力2.4网关验签组件的设计和应用2.4.1验签整体架......
  • 【图书介绍】几本适合当教材的大数据技术图书
    《SparkSQL大数据分析快速上手》《SparkSQL大数据分析快速上手(大数据技术丛书)》(迟殿委,王泽慧,黄茵茵)【摘要书评试读】-京东图书《Spark SQL大数据分析快速上手》内容基于Spark新版本展开,符合企业目前开发需要。《Spark SQL大数据分析快速上手》全面讲解Spark SQL相......
  • Dockerfile进行详细的介绍
    Dockerfile是用于定义Docker镜像构建过程的文本文件,它包含了一系列的命令和指令,这些命令告诉Docker如何构建一个镜像。Docker镜像是应用程序和所有依赖项的打包,其中包括操作系统环境、安装的依赖包以及应用本身。通过Dockerfile,开发者能够自动化镜像构建过程,使得镜......
  • C++vector的常用接口及其介绍
    在C++中,vector 是一个非常常用的动态数组容器,它定义在 <vector> 头文件中。以下是 vector 的一些常用接口及其介绍:构造函数vector():默认构造函数,创建一个空的 vector。std::vector<int>v;vector(size_typen,constvalue_type&val=value_type()):创建一个包......