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

news/2025/1/6 21:16:18/文章来源:https://www.cnblogs.com/o-O-oO/p/18652647

在开发中,我们经常使用各种配置文件,通常会使用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

原创 蓝天白云喵 喵舍宝典

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/864075.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Win32汇编学习笔记04.重定位与汇编引擎

Win32汇编学习笔记04.重定位与汇编引擎-C/C++基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net 重定位 **重定位:**也称为代码自重定位,代码自己去计算自己使用的各种资源再新进程中的地址,相应代码被称为被重新定位过后的代码。 示例目标:向指定进程 扫雷 注入…

【哈希算法】实战应用

一、使用哈希进行函数调用 使用哈希隐藏API调用 代码 #include <windows.h> #include <stdio.h>int main() {MessageBoxA(NULL, "Meow-meow!","=^..^=", MB_OK);return 0; }编译 i686-w64-mingw32-g++ meow.c -o meow.exe -mconsole -I/usr/sh…

恶意软件常用加密算法

前面主要是加密字符串信息,加密算法还可以加密shellcode、通信数据包、配置信息等 一、常用加密算法概述 加密配置信息、加密通信信道、加密窃取数据、混淆代码放置静态分析 总体来说就是加密shellcode、代码模块、配置信息、通信等 二、加密配置信息 设置一个场景,恶意dll文…

Bash 定义变量

定义数组 在 Bash 中,declare -a 用于显式地声明一个变量为数组类型。虽然在许多情况下,即使不使用 declare -a,Bash 也能自动将变量识别为数组,但使用 declare -a 可以明确地说明该变量是一个数组,并且在某些情况下可以提高代码的可读性和可维护性。 区别与作用:declare…

内网渗透

内网渗透 内网基础知识 前言 本文主要介绍内网方面的一些概念,作为内网学习的一个开端。在本文中,所有内容仅供参考,哪有不对,还请指出,谢谢各位师傅。 单域和多域 内网概念 内网也指局域网,是指在某个区域由多台计算机互联而成的计算机组,内网渗透就是在内网中获取计算…

Ubuntu 22.04 手动安装MySQL 5.7.41时依赖包libtinfo5失败

在Ubuntu 22.04安装MySQL5.7.41低版本时,需要安装依赖包libtinfo5,但偶尔会出现安装失败,可使用以下步骤解决此问题。 1、sudo apt install software-properties-common2、sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu/ jammy main universe"…

Python图注意力神经网络GAT与蛋白质相互作用数据模型构建、可视化及熵直方图分析

全文链接:https://tecdat.cn/?p=38617 原文出处:拓端数据部落公众号 摘要: 本文聚焦于图注意力网络GAT在蛋白质 - 蛋白质相互作用数据集中的应用。首先介绍了研究背景与目的,阐述了相关概念如归纳设置与转导设置的差异。接着详细描述了数据加载与可视化的过程,包括代码实…

AtCoder Beginner Contest 387 赛后复盘

abc。省流:A,B,C,D,FA - B 模拟即可。 C 数位 dp。 首先我们先将问题转换为 \([1,R]\) 中蛇数的个数减去 \([1,L-1]\) 中蛇数的个数。 设 \(num_i\) 为数字的第 \(i\) 位(从左往右数)。 我们设 \(f_{dep,mx,lim,ze}\) 表示当前第 \(dep\) 位,首位为 \(mx\),有没有达到…

厨师服穿戴智能监测摄像机

厨师服穿戴智能监测摄像机的应用可以提高厨师在工作中的效率和规范性。通过摄像头的实时监测功能,主厨或者厨房管理人员可以远程观察厨师的工作情况,及时发现问题并进行指导和纠正。此外,设备还能够实现对厨房工作流程的记录和分析,为厨师提供数据支持,帮助其更好地管理工…

骑车不戴头盔监测摄像机

骑车不戴头盔监测摄像机的作用是对骑行者是否戴头盔进行监测和识别,当监测到有骑行者未戴头盔时,摄像机会发出警报,并提示骑行者戴上头盔。这种智能设备可以有效地规范骑行行为,提高骑行安全系数,减少交通事故的发生率。此外,通过监测和识别,还可以对骑行者未戴头盔的行…

电瓶车进电梯识别报警摄像机

电瓶车进电梯识别报警摄像机的作用是对电动车进入电梯过程中的安全情况进行监测和预警,及时发现潜在的安全隐患,提醒用户和管理人员采取相应措施避免事故发生。这种智能设备可以通过监测电动车进入电梯的行为、车辆状态等信息,进行实时分析和判断,发现电动车可能存在的安全…