司基礎平臺技術組整合了一套 cli 和相關工具,React Native、iOS、Android、Node、前端項目統一進行依賴管理、打包、提測、發佈等,項目工程中有 .yml
文件,不太瞭解作用,所以本文對其進行了解和學習。
一、 YAML 是什麼
YAML (a recursive acronym for “YAML Ain’t Markup Language”) is a human-readable data-serialization language. It is commonly used for configuration files and in applications where data is being stored or transmitted. YAML targets many of the same communications applications as Extensible Markup Language (XML) but has a minimal syntax which intentionally differs from SGML .[1] It uses both Python-style indentation to indicate nesting, and a more compact format that uses [] for lists and {} for maps[1] making YAML 1.2 a superset of JSON.[2] ~維基百科
編程難免需要寫配置文件,怎麼寫配置有很多種方式,XML、JSON、YAML…
YAML 是用來專門寫配置文件的語言,非常簡潔、強大,比 JSON 格式更簡潔。
YAML 是一種人類可讀的數據序列化語言,通常用於配置文件和用於存儲或傳輸數據的應用程序中。
基本語法:
- 大小寫敏感
- 使用縮進表示層級關係
- 縮進時不允許使用 Tab 鍵,只允許使用空格鍵
- 縮進的空格數目不重要,只要相同層級的元素左側對齊即可
#
表示註釋,從這個字符串開始到這一行結束,都會被解析器認爲是註釋而忽略
YAML 支持3種數據結構
- 對象:鍵值對的集合,又稱爲映射(mapping)、哈希(hashes)、字典(dictionary)
- 數組:一組按次序排列的值,又稱爲序列(sequence)/列表(list)
- 純量:單個的、不可再分的值
二、對象
對象:一組鍵值對,用冒號結構表示
hobby: coding
轉換爲 Javascript
{ hobby: 'coding' }
Yaml 也允許另一種寫法,將所有鍵值對寫成一個行內對象
person: { age: 24, hobby: coding, title: 資深工程師 }
轉換爲 Javascript
{ person: { age: 24, hobby: 'coding', title: '資深工程師' } }
三、數組
一組連詞線開頭的行,構成一個數組
- movie
- coding
- music
- bicycle
轉換爲 Javascript
[ 'movie', 'coding', 'music', 'bicycle' ]
數據結構的子成員是一個數組,則可以在該項下面縮進一個空格
- music
- coding
- swift
- Javascript
- shell
- php
- ruby
- python
- cat
- movie
轉換爲 Javascript
['music', ['swift', 'Javascript', 'shell', 'php', 'ruby', 'python'], 'cat', 'movie']
數組也可以用行內表示法
coding: [swift, Javascript, shell, php, ruby, python]
轉換爲 Javascript
{ coding: ['swift', 'Javascript', 'shell', 'php', 'ruby', 'python']}
四、複合結構
對象和數組可以結合使用,形成複合結構。
hobby:
- coding
- music
- movie
- bicycle
skills:
swift: iOS
ruby: cocoapod
php: server
python: spider
轉換爲 Javascript
{
hobby: ['coding', 'music', 'movie', 'bicycle'],
skills: {
swift: 'iOS',
ruby: 'cocoapod',
php: 'server',
python: 'spider'
}
}
五、純量
純量是最基本、不可再分的值。以下數據類型都屬於 Javascript 的純量
- 字符串
- 布爾值
- null
- 整數
- 浮點數
- 日期
- 時間
數值直接以字面量的形式表示:
number: 12.30
轉換爲 Javascript
{ number: 12.30}
布爾值用 true 和 false 表示
isDeveloper: true
轉換爲 Javascript
{ isDeveloper: true}
null 用 ~ 表示
pet: ~
轉換爲 Javascript
{ pet: null }
時間採用 ISO8601 格式
iso8601: 2019-11-27-14t21:59:43.10-05:00
轉換爲 Javascript
{ iso8601: new Date('2019-11-27-14t21:59:43.10-05:00') }
YAML 允許使用2個感嘆號,強制數據類型轉換。
age: !!str 24
isDeveloper: !!str true
轉換爲 Javascript
{ age: '24', isDeveloper: 'true' }
六、字符串
字符串是 YAML 中最常見,也是最複雜的一種數據類型。
字符串默認不使用引號表示。
str: 這是一行字符串
轉換爲 Javascript
{ str: '這是一行字符串' }
如果字符串之中包含空格或特殊字符,需要放在引號之中。
str: '內容: 字符串'
轉換爲 Javascript
{ str: '內容: 字符串' }
單引號和雙引號都可以使用,雙引號不會對特殊字符轉義。
s1: '姓名\n杭城小劉'
s2: "姓名\n杭城小劉"
轉換爲 Javascript
{ s1: "姓名\\n杭城小劉", s2: "姓名\n杭城小劉" }
單引號之中如果還有單引號,必須連續使用2個單引號轉義
str: 'labor''s day'
轉換爲 Javascript
{ s1: "labor's day" }
字符串可以寫成多行,從第二行開始,必須有一個單空格縮進。換行符會被轉爲空格。
str: 這是第一段
多行
字符串
轉換爲 Javascript
{ str: "這是第一段 多行 字符串" }
多行字符串可以使用 | 保留換行符,也可以使用 > 摺疊換行。
this: |
Foo
Bar
that: >
Foo
Bar
轉換爲 Javascript
{ this: "Foo\nBar\n", that: "Foo Bar\n" }
- 表示保留文字末尾的換行,- 表示刪除字符串末尾的換行
name: |
LBP
hobby: |+
Coding
Movie
sports: |-
Bicycle
轉換爲 Javascript
{ name: "LBP\n", hobby: "Coding\nMovie\n\n\n", sports: "Bicycle" }
字符串之中還可以插入 HTML 標記
message: |
<p style="color:red">
yaml
</p>
轉換爲 Javascript
{message: "\n <p style="color:red">\n yaml\n</p>\n"}
七、引用
錨點 &
和別名 *
用來表示引用
engineer: &engineer
name: 杭城小劉
age: 24
title: 資深工程師
iOSer:
kind: iOS
<<: *engineer
等同於下面的 yml 代碼
engineer:
name: 杭城小劉
age: 24
title: 資深工程師
iOSer:
kind: iOS
name: 杭城小劉
age: 24
title: 資深工程師
其中: <<
表示合併到當前數據,&
用來建立錨點, *
用來表示引用錨點。
其他
參考鏈接: