前言
配置文件虱颗,不言而喻沥匈,主要是我們進(jìn)行項目和工程配置的文件。
如果是站在前端角度說的話忘渔,我們最常接觸的就是 json
以及 js
類型的文件高帖,這種形式的配置寫法對前端非常友好,因?yàn)槎际俏覀兪煜さ?JS 對象結(jié)構(gòu)畦粮,如:
package.json
webpack.config.js
babel.config.js
vue.config.js
不過散址,隨著技術(shù)的更新迭代,也涌現(xiàn)出一些新的配置文件格式宣赔,相比較而言预麸,原有的文件格式好像也變得不是那么好用了。雖然在此之前儒将,json
+js
用著也不錯吏祸,不過,當(dāng)新的工具出現(xiàn)后钩蚊,尤其是在你深度體驗(yàn)與使用之后贡翘,可能會發(fā)現(xiàn)事情似乎有點(diǎn)那么不一樣了蹈矮,感覺新的玩意就是好啊??,也便開始嫌棄之前的家伙了~
不過鸣驱,我們要站在不同角度思考問題泛鸟,從新工具誕生的角度看,其誕生必然有著一定的歷史背景存在踊东,如:
- 舊工具在某些場景表現(xiàn)吃力北滥,需要更優(yōu)的替代方案
- 舊的寫法和模式在某些場景下有著明顯的短板和缺陷,需要更進(jìn)一步的完善方案
背景
最近在做開源項目的時候递胧,在開發(fā)功能時碑韵,考慮到不同場景、不同用戶的不同需求缎脾,在開始設(shè)計功能時就考慮到預(yù)留一定的可定制窗口方便用戶進(jìn)行定制化配置祝闻。當(dāng)然,在功能不斷開發(fā)進(jìn)行時遗菠,以及后期的迭代拓展時联喘,都會源源不斷的誕生出各種小功能和定制需求,因此辙纬,對于擁有一個足夠簡單豁遭、易用、拓展的配置文件是相當(dāng)有必要的贺拣。
它應(yīng)該具備以下基本能力:
- 支持注釋:對于配置文件來說蓖谢,注釋的重要性不必多說,它需要描述每個配置字段的作用
- 足夠簡單:語法足夠簡單譬涡,用法足夠簡單闪幽,上手足夠簡單;至少保證新人能很快上手使用
- 方便讀寫:對于用戶來說涡匀,應(yīng)該是可讀性非常高的盯腌,符合人類語言習(xí)慣的,概覽之后可以快速上手配置
在此之前的版本陨瘩,我已經(jīng)針對該想法做了初步的實(shí)施落地腕够,從個人經(jīng)驗(yàn)來說,我之前在搞 CI/CD 自動化部署相關(guān)的東西時舌劳,寫過一些 github action(配置文件為yaml
格式)帚湘,因此,對于yaml
語法算是有些了解甚淡。
從使用感受上來說客们,它語法更簡潔、支持注釋,所以底挫,我果斷選擇了yaml
作為我對于項目的配置文件格式恒傻。
不過,在這段時間的使用過程中建邓,我也發(fā)現(xiàn)了yaml
存在的一些問題盈厘,因此,最近我又重新思考了一下下這個問題:
- 是繼續(xù)按照傳統(tǒng)的
js
文件的對象寫法呢官边? - 還是繼續(xù)使用
yaml
作為配置文件使用呢沸手? - 還是進(jìn)一步研究一些其他類型的配置文件呢?
- 這些配置文件類型又有啥本質(zhì)區(qū)別呢注簿?
抱著學(xué)習(xí)的心理契吉,咱不能在遇到問題的時候就選擇逃避呀,那么本篇文章也算是對不同類型配置文件的一種研究和學(xué)習(xí)了诡渴。
簡單介紹
JSON
JSON
的定義一般是作為數(shù)據(jù)格式捐晶,它通常用于序列化、結(jié)構(gòu)化數(shù)據(jù)并通過網(wǎng)絡(luò)進(jìn)行交換妄辩,通常發(fā)生在服務(wù)器與 Web 應(yīng)用之間惑灵。不過也有很多工具將其作為配置文件使用。
JSON 其實(shí)完全可以當(dāng)成是 JS 對象的形式進(jìn)行理解眼耀、使用英支。
其實(shí)使用JSON
作為配置文件也有其一定的優(yōu)勢:
- 語法非常簡單,純粹的鍵值對結(jié)構(gòu)
- 很多編程語言的標(biāo)準(zhǔn)庫都支持
JSON
哮伟,比如:在JS當(dāng)中你可以直接引入讀取 - 現(xiàn)在幾乎所有的工具都提供
JSON
支持干花,包括語法突出顯示、自動格式化楞黄、驗(yàn)證工具等池凄。 - 采用人類可讀的輕量級文本,只需更少的編碼谅辣,處理速度更快
但是,也因?yàn)槠洫?dú)特的定位婶恼,它天生就注定了并不適合作為配置文件使用桑阶,原因也很明顯:
-
不支持注釋:對于配置文件來說,注釋的重要性不言而喻勾邦,但是
JSON
不支持添加注釋(JSON
作為一種數(shù)據(jù)交換格式蚣录,也不需要注釋??) -
語法過于嚴(yán)格:鍵和字符串必須使用
""
雙引號(其實(shí)對于鍵來說,并不需要使用引號)眷篇,結(jié)尾不允許有逗號(除了結(jié)尾都必須有逗號萎河,哈哈~) - 多余的最外層大括號:作為配置文件來說,最外層的大括號也顯得有些多余(這也是其作為交換數(shù)據(jù)格式的特點(diǎn),為了界定不同的對象)
雖然大家都很熟悉了虐杯,我們還是按流程看下基本用法玛歌,方便接下來做對比,如下:
{
"name": "cat",
"desc": {
"color": "orange",
"age": 1
}
}
可以看出JSON
作為數(shù)據(jù)格式擎椰,還是比較合適且優(yōu)秀的支子,但是作為配置文件來說,總覺得是力氣使錯了方向??
YAML
YAML 是一種數(shù)據(jù)序列化語言达舒,通常用于編寫配置文件(它的流行和 k8s 脫不了關(guān)系??~)值朋。
語法規(guī)則:
- 大小寫敏感
- 使用縮進(jìn)表示層級關(guān)系
- 縮進(jìn)時不允許使用Tab鍵,只允許使用空格巩搏。
- 縮進(jìn)的空格數(shù)目不重要昨登,只要相同層級的元素左側(cè)對齊即可
-
#
表示注釋,從這個字符一直到行尾贯底,都會被解析器忽略丰辣。 - 文件拓展名為
.yaml
、.yml
支持的數(shù)據(jù)格式:
- 對象:鍵值對的集合丈甸,又稱為映射/ 哈希 / 字典
- 數(shù)組:一組按次序排列的值糯俗,又稱為序列 / 列表
- 純量:單個的、不可再分的值睦擂,可以理解為基本類型
以下數(shù)據(jù)類型都屬于 JavaScript 的純量:
字符串得湘、布爾值、整數(shù)顿仇、浮點(diǎn)數(shù)淘正、Null、時間臼闻、日期
其特點(diǎn)如下:
- 有更好的可讀性鸿吆,對用戶更友好
- 簡潔和強(qiáng)大,寫法簡潔述呐,也有復(fù)雜的語法支持不同功能
- 是JSON的超集惩淳,JSON 文件在 YAML 中有效
- 使用 Python 風(fēng)格的縮進(jìn)來表示嵌套
如果說到缺點(diǎn)的話,那和它的特點(diǎn)也是密不可分的
- 因?yàn)椴皇窃С值母袷脚野幔煌脚_需要專門的解析工具(如:在JS中使用需要使用
js-yaml
解析思犁,在線轉(zhuǎn)換) - 簡單使用,基本語法夠簡單进肯;但是進(jìn)階使用激蹲,語法就比較復(fù)雜了,對于多行字符串的處理也有待優(yōu)化江掩,尤其是結(jié)合縮進(jìn)語法一起
- 縮進(jìn)語法学辱,如果搞錯了縮進(jìn)或者沒看清乘瓤,夠你定位問題的了
按慣例,看下基本用法:
# 我是注釋
name: cat
desc:
color: orange
age: 1
date: 2022-09-01 16:10:01
同時上面的內(nèi)容也可以這樣寫:
name: cat
desc: { color: orange, age: 1, date: 2022-09-01 16:10:01 } # JSON的超集
轉(zhuǎn)為JS如下:
{
name: 'cat',
desc: {
color: 'orange',
age: 1,
date: 'Fri Sep 02 2022 00:10:01 GMT+0800 (中國標(biāo)準(zhǔn)時間)' // new Date
}
}
TOML
全稱 Tom's Obvious, Minimal Language
策泣,意為語義明顯的衙傀、配置最小化的的語言。
官方描述:
為人而生的配置文件格式(好屌的感覺??~)着降。
TOML 旨在成為一個語義明顯且易于閱讀的最小化配置文件格式差油。TOML 被設(shè)計成可以無歧義地映射為哈希表。TOML 應(yīng)該能很容易地被解析成各種語言中的數(shù)據(jù)結(jié)構(gòu)任洞。
- TOML 以人為先
- 語義明顯易于閱讀
- 能無歧義地映射為哈希表
- 易于解析成各種語言中的數(shù)據(jù)結(jié)構(gòu)
- TOML 具備實(shí)用的原生類型
- 鍵/值對
- 數(shù)組
- 表
- 內(nèi)聯(lián)表
- 表數(shù)組
- 整數(shù) & 浮點(diǎn)數(shù)
- 布爾值
- 日期 & 時刻蓄喇,帶可選的時區(qū)偏移
- TOML 受到廣泛支持
- TOML 已經(jīng)擁有大多數(shù)當(dāng)今使用的最流行的編程語言的實(shí)現(xiàn):C、C#交掏、C++妆偏、Clojure、Dart盅弛、Elixir钱骂、Erlang、Go挪鹏、Haskell见秽、Java、Javascript讨盒、Lua解取、Objective-C、Perl返顺、PHP禀苦、Python、Ruby遂鹊、Swift振乏、Scala……以及更多。
語法規(guī)則:
- 大小寫敏感
- 文件必須是合法的 UTF-8 編碼的 Unicode 文檔
- 簡潔秉扑、清晰的
=
寫法(name = "cat"
) - 字符串需要由引號(
"
)包裹 - 表寫法慧邮,鍵值對的集合,由表頭定義舟陆,連同方括號作為單獨(dú)的行出現(xiàn)
-
#
表示注釋 - 文件拓展名為
.toml
其特點(diǎn)如下:
- 寫法符合直覺误澳、簡單清晰
- 鍵名寫法強(qiáng)大,鍵名可以是裸露的吨娜,引號引起來的脓匿,或點(diǎn)分隔的淘钟。
- 對字符串支持完善宦赠,基本字符串陪毡、多行基本字符串、字面量和多行字面量
- 表寫法功能強(qiáng)大勾扭,鍵值對毡琉、數(shù)組、嵌套寫法等
缺點(diǎn):
- 不是原生支持的格式妙色,不同平臺需要專門的解析工具(如:在JS中使用需要使用
@ltd/j-toml
解析桅滋,在線轉(zhuǎn)換) - 屬于比較新型的格式,社區(qū)認(rèn)知度不高
- 新人對核心語法“表”需要適應(yīng)
基本用法如下:
# 我是注釋
name = "cat"
[desc]
color = "orange"
age = 1
date = 2022-09-01 16:10:01
你也可以這樣寫:
name = "cat"
desc.color = "orange"
desc.age = 1
desc.date = 2022-09-01 16:10:01
轉(zhuǎn)為JS如下:
{
name: 'cat',
desc: {
color: 'orange',
age: 1身辨,
date: '2022-09-01T16:10:01'
}
}
用法對比
其實(shí)站在配置文件的角度思考丐谋,我們最關(guān)心的就是鍵值對寫法(一個屬性控制一個功能點(diǎn)),誰能做到在使用時讀寫更方便煌珊,誰也就更具有優(yōu)勢号俐。
基本上就是一個對象結(jié)構(gòu),數(shù)據(jù)類型符合字符串定庵、對象吏饿、數(shù)組、布爾值蔬浙、日期猪落、數(shù)值也就差不多了
{
"key" : value // 這里的 value 應(yīng)可以是以上的任何類型
}
字符串
1?? 簡單字符串用法
-
json寫法:
{ "name" : "cat" }
最外層花括號
{}
不可缺少,且不主持添加注釋畴博,key
和value
都需要使用引號""
進(jìn)行包裹 -
yaml寫法:
name: cat # 貓
默認(rèn)不需要使用引號
""
進(jìn)行包裹(用引號包裹結(jié)果也是一樣的)笨忌,簡單字符串使用非常簡單,對于多行字符串則有所不同绎晃。特別注意的是:冒號
:
后面要有空格蜜唾,這符合 yaml 后面的所有語法規(guī)范 -
toml寫法:
name = "cat"
有沒有空格無所謂,不影響解析庶艾,value部分需要按照字符串的寫法袁余,使用引號
""
進(jìn)行包裹
2?? 多行字符串
有些場景我們可能會定義很長的一段字符串,默認(rèn)展示肯定是在一行顯示的咱揍,這樣既不好讀也不好維護(hù)颖榜,尤其針對一些 shell 命令,我們在前端工程中應(yīng)該見過不少這樣的煤裙。
我舉個列子:
"scripts": {
"dev": "webpack-dev-server --base test/ --port 8081 --config build/webpack.dev.config.js",
"lint:fix:utils": "eslint --fix \"./packages/utils/**\" --ext .js,.ts,.json"
}
-
json寫法:
不支持
-
yaml寫法:
# 注意縮進(jìn)掩完,第二行、第三行開頭有空格(必須這樣寫) dev: webpack-dev-server --content-base test/ --port 8081 --config build/webpack.dev.config.js
字符串可以寫成多行硼砰,從第二行開始且蓬,必須有一個單空格縮進(jìn)。換行符會被轉(zhuǎn)為空格题翰。
-
toml寫法:
dev = """ webpack-dev-server --base test/ --port 8081 --config build/webpack.dev.config.js """
多行基本字符串由三個引號包裹恶阴,允許折行诈胜。
官方規(guī)范:緊隨開頭引號的那個換行會被去除,其它空白和換行會被原樣保留冯事。
特別注意:
@ltd/j-toml
解析庫目前支持自定義拼接焦匈,比如你想要以' '
空格進(jìn)行拼接,而不使用換行'\n'
拼接(TOML.parse(data, { joiner: ' ' })
)昵仅,以本例舉例缓熟,我換行是為了易讀,在解析之后的命令應(yīng)該還是一行的摔笤、一個整體的够滑,就可以使用這種方式你還可以用行末反斜杠自動剔除非空白字符前的任何空白字符:
dev = """ webpack-dev-server --base test/ \ --port 8081 \ --config build/webpack.dev.config.js \ """
解析結(jié)果如下:
{ dev: 'webpack-dev-server --base test/ --port 8081 --config build/webpack.dev.config.js' }
3?? 字面量字符串
為了方便理解,你把它當(dāng)成JS的模板字符串即可吕世,沒有轉(zhuǎn)義行為版述,所見即所得。
這里以保留換行為例說明:
-
json寫法:
不支持寞冯,JSON只能用引號
""
渴析,但是如果你想保留類似換行操作符一樣的東西,你可以這樣做{ "hi": "echo hello \n world \n 我是小明", "ha": "echo \"hello\" \"world\"" }
很煩吮龄,看著就難受的一批俭茧,寫法也很操蛋~,我只能說“打擾了”??
換行需要添加
\n
漓帚,以及你要是想在JSON中輸出引號""
母债,就必須進(jìn)行轉(zhuǎn)義 -
yaml寫法:
在首行加一個
|
符號即可,還是蠻簡單的尝抖,縮進(jìn)一定要把握好~hi: | echo hello world 我是小明
解析為JS如下:
{ hi: 'echo hello\nworld\n我是小明\n' }
- 如果你想保留文字塊末尾的換行毡们,可以使用
|+
- 如果你想刪除字符串末尾的換行,可以使用
|-
hi: |- echo hello world 我是小明
解析為JS如下:
{ hi: 'echo hello\nworld\n我是小明' }
- 如果你想保留文字塊末尾的換行毡们,可以使用
-
toml寫法:
字面量字符串由單引號包裹昧辽,不能換行(不會進(jìn)行任何轉(zhuǎn)義)
path = 'C:\Users\nodejs\templates' path2 = '\\User\admin$\system32' quoted = 'Tom "Dubs" Preston-Werner' regex = '<\i\c*\s*>'
多行字面量字符串兩側(cè)各有三個單引號來包裹衙熔,允許換行。
# 三個單引號包裹 hi = ''' echo hello world 我是小明 '''
解析為JS如下:
{ hi: 'echo \nhello \nworld 我是小明\n' }
解析規(guī)則
TOML.parse(data, { joiner: '\n' })
字符串用法小結(jié)
總的來說搅荞,JSON對于字符串的支持還是比較弱的红氯,對于多行字符串等寫法使用比較吃力;yaml總體來說簡單方便咕痛,對字符串的支持還是不錯的痢甘,相關(guān)解析庫也很易用,唯一需要注意的就是縮進(jìn)需要把控好茉贡;如果要說對字符串的支持能力塞栅,toml是最強(qiáng)的毋庸置疑,也沒有縮進(jìn)語法的擔(dān)憂腔丧,幾乎支持你所能相到的任何場景放椰,不過王暗,目前確實(shí)存在使用量不高,第三方解析庫不太穩(wěn)定的問題庄敛。
npm周下載量(Weekly Downloads)大致如下:
-
js-yaml:
53,724,459
-
@ltd/j-toml:
33,951
(1.0版本后官方指定的解析庫) -
toml:
666,591
(0.4版本,不活躍)
千萬級別和萬級別的對比~
@ltd/j-toml
解析庫對于存在多行字符串的toml文件進(jìn)行解析時科汗,必須要手動指定拼接規(guī)則({ joiner: '' }
)藻烤,有點(diǎn)奇怪,不過头滔,這樣也使得我們在處理多行字符串時怖亭,可以自定義拼接規(guī)則,以此實(shí)現(xiàn)不同的效果(要是說對于一個文件內(nèi)多個多行字符串選擇不同的處理方式坤检,有待商榷)
對象
對象寫法還是非常普遍的兴猩,對于該核心語法的掌握還是很有必要的,其實(shí)也是鍵值對的范疇早歇,舉例如下:
1?? 簡單用法
-
json寫法:
{ "desc": { "color": "red", "eaten": false, "age": 1 } }
對于JSON來說倾芝,還是老樣子,不支持注釋箭跳,鍵必須用引號包括晨另,如果值為字符串也要使用引號進(jìn)行包裹,非字符串類型可以不用引號包裹
-
yaml寫法:
# 描述 desc: color: red # 顏色 eaten: false age: 1
解析為JS如下:
{ desc: { color: 'red', eaten: false, age: 1 } }
可以發(fā)現(xiàn)谱姓,yaml是可以很好地識別非字符串類型的借尿,數(shù)值類型和布爾值都正確轉(zhuǎn)義
-
toml寫法:
# 描述 [desc] color: red # 顏色 eaten: false age: 1
對象在toml中稱為表(也被稱為哈希表或字典),是鍵值對的集合屉来,它們由表頭定義路翻,連同方括號作為單獨(dú)的行出現(xiàn)(
[desc]
)。對于toml來說茄靠,鍵名可以是裸露的茂契,引號引起來的,或點(diǎn)分隔的(十分強(qiáng)大的能力)慨绳。
解析為JS如下:
解析規(guī)則:
TOML.parse(data, { bigint: Number.MAX_SAFE_INTEGER })
只要在超過
Number.MAX_SAFE_INTEGER
這個范圍后账嚎,才會啟用BigInt
,一般整型寫法用這個就行了{ desc: { color: 'red', eaten: false, age: 1 } }
可以發(fā)現(xiàn)儡蔓,yaml是可以很好地識別非字符串類型的郭蕉,數(shù)值類型和布爾值都正確轉(zhuǎn)義
2?? 復(fù)雜一些的用法
在使用對象時也會遇到多個對象結(jié)構(gòu)與嵌套的情況,如下:
-
json寫法:
{ "desc": { "color": "red", "eaten": false, "age": 1 }, "animals": { "dog": { "color": "black" }, "cat": { "color": "red" } } }
-
yaml寫法:
desc: color: red eaten: false age: 1 animals: dog: color: black cat: color: red
yaml寫法還是滿簡單清晰地喂江,控制好縮進(jìn)一切OK
-
toml寫法:
[desc] color = "red" # 顏色 eaten = false age = 1 [animals] dog.color = "black" cat.color = "red"
官方推薦使用標(biāo)準(zhǔn)的表寫法(
[desc]
作為表頭)召锈,每個表可以理解為一個對象體。不過获询,因?yàn)?toml強(qiáng)大的語法系統(tǒng)涨岁,你甚至可以直接使用點(diǎn).
寫法拐袜,不過為了規(guī)范和易讀推薦使用官方寫法。你可以這樣寫:
desc.color = "red" # 顏色 animals.dog.color = "black"
你還可以這樣寫:
desc.color = "red" # 顏色 [animals.dog] color = "black"
你甚至可以這樣寫:
# toml對于鍵的解析能力十分強(qiáng)大梢薪,其他特殊寫法都會被標(biāo)準(zhǔn)化處理 desc."color" = "red" # 顏色 animals . "dog" .color = "black"
解析為JS如下:
{ desc: { color: 'red' }, animals: { dog: { color: 'black' } }, }
對象用法小結(jié)
總的來說蹬铺,JSON對于對象的寫法支持還是蠻OK的,但是需要指出的是秉撇,JSON不支持注釋甜攀,這是硬傷,而且和另外兩個格式相比較而言琐馆,寫法也是略顯繁瑣规阀;yaml總體來說挺不錯的,寫法簡潔瘦麸、清爽谁撼,我還是蠻喜歡的,需要指出的是對于縮進(jìn)的處理一定要注意滋饲,yaml語法規(guī)范嚴(yán)格厉碟,一個縮進(jìn)不對就會解析錯誤;就目前而言屠缭,toml在對象語法和使用上優(yōu)勢明顯墨榄,寫法也是十分簡單,而且其對鍵名的寫法支持異常強(qiáng)大勿她,極大的豐富了不同場景下的需求袄秩,不過,需要指出的是逢并,從易讀和已維護(hù)性考慮之剧,還是推薦按照官方規(guī)范的寫法使用。
數(shù)組與嵌套組合
數(shù)組以及JSON數(shù)組等常見用法的對比舉例砍聊,如下:
1?? 數(shù)組的基本用法
-
json寫法:
{ "desc": [ "red", false, { "color": "red", "age": 1 } ] }
-
yaml寫法:
desc: - red - false - color: red # 數(shù)組內(nèi)的對象寫法需要注意 age: 1 # 同一對象下的項(開頭沒有 - )
數(shù)組的項通過
-
表示 -
toml寫法:
desc = ["red", false, { color = "red", age = 1 }]
desc = [ "red", false, { color = "red", age = 1 } ]
空白會被忽略背稼,子元素由逗號分隔,合規(guī)的類型都可以作為值玻蝌,可以混合不同類型的值
2?? JSON數(shù)組多級嵌套的的基本用法
-
json寫法:
{ "animals": [ { "desc": [ "red", false, 1 ] }, { "dog": [ { "color": "black", "age": 1 }, { "color": "white", "age": 2 } ], "cat": [ { "color": "black", "age": 3 } ] } ] }
-
json寫法:
animals: - desc: - red - false - 1 - dog: - color: black age: 1 - color: white age: 2 cat: - color: black age: 3
-
toml寫法:
[[animals]] desc = ["red",false,1] [[animals.dog]] color = "black" age = 1 [[animals.dog]] color = "white" age = 2 [[animals.cat]] color = "black" age = 3
數(shù)組在toml中稱為表數(shù)組蟹肘,它通過把表名寫在雙方括號里的表頭來表示(
[[animals]]
)表頭的第一例定義了這個數(shù)組及其首個表元素,而后續(xù)的每個則在該數(shù)組中創(chuàng)建并定義一個新的表元素俯树。這些表按出現(xiàn)順序插入該數(shù)組
注意和對象的區(qū)別帘腹,表是一個括號表示
[desc]
,表數(shù)組是雙方括表示[[animals]]
數(shù)組與嵌套數(shù)組小結(jié)
其實(shí)作為配置文件來說许饿,數(shù)組一般還是有不少使用場景的阳欲,對于掌握數(shù)組的基本用法還是蠻有必要的,但是,對于類JSON數(shù)組來說球化,使用場景比較有限(gtHub action配置文件中這種用法多一些)秽晚。
竟然覺得JOSN看著屬于比較清晰、易讀的筒愚;yaml寫法我在配置github action的時候使用過赴蝇,當(dāng)時就是語法縮進(jìn)和數(shù)組對象結(jié)構(gòu)一起使用時犯了錯,耽誤了不少時間定位問題巢掺,還是那句話句伶,yaml對于縮進(jìn)的處理需要特別注意;toml我用著還是不太習(xí)慣址遇,但是總體結(jié)構(gòu)劃分、讀寫性上絕對值得點(diǎn)贊斋竞,看著還是比較清晰地倔约,就是對于表的使用需要適應(yīng),用習(xí)慣了覺得是值得推薦的坝初。
總結(jié)
好了浸剩,就寫這么多吧。對于相關(guān)內(nèi)容感興趣的可以去官方文檔進(jìn)一步查看鳄袍,本文也只是通用功能的概括绢要,篇幅有限,很多高級用法這里不再贅述拗小。
其實(shí)重罪,這整個一輪學(xué)習(xí)、分析對比下來哀九,就這三種配置文件格式來說剿配,如果沒有特殊使用場景,到了一定需要考慮選擇配置文件的地方阅束,我覺得吧呼胚,就JS對象用著就挺好的,畢竟人家webpack這么多配置息裸,用著不也是完全ok蝇更;但是這樣說是屬于比較局限于前端角度的看法,畢竟我們對于JS語言整體是熟悉的呼盆,上手起來自然容易些年扩。
但是,作為配置文件來說访圃,它一定不能像開發(fā)語言一樣那么的重常遂,其實(shí)也不需要那么多功能,我們對配置文件的定位就是,它只要能覆蓋我們基本的使用場景也就足夠了克胳。