yml引用其他變量

參考:YAML文件(.yml)中的鍵(key)通過變量引用來設置 - i江湖中人 - 博客園

通過變量引用設置配置量的【值(value)】

YAML文件中,一個配置量的可以通過引用另一個變量來設置。例如:

 
  1. default-db:
  2. port: 3306
  3.  
  4. user-db:
  5. port: ${default-db.port}
 

但是,如果想通過變量引用設置,通過${}是做不到的。例如:

 
  1. site:
  2. url:
  3. user: www.user.net
  4. shop: www.shop.net
  5.  
  6. site:
  7. slogan:
  8. ${site.url.user}: everyone is great!
  9. ${user.url.shop}: buy anything you want!
 

在將配置讀入程序中之後,你會發現上述的${}引用,並沒有替換成真正的值。

通過錨點引用設置配置量的【鍵(key)】

要想替換鍵,則需要用到錨點。錨點用符號“&”定義,並用符號“*”進行引用。
錨點有兩種使用方式,一是通過“<<:”將鍵值對一起引入

 
  1. default-db: &default-db-config
  2. host: 127.0.0.1
  3. port: 3306
  4.  
  5. user-db:
  6. <<: *default-db-config
 

其實際效果如:

 
  1. default-db:
  2. host: 127.0.0.1
  3. port: 3306
  4.  
  5. user-db:
  6. host: 127.0.0.1
  7. port: 3306
 

說明:&後面的錨點名字,可自己定義,不必與配置量的鍵相同。

另一種是僅引入配置的值

 
  1. site:
  2. url:
  3. user: &site.user www.user.net
  4. shop: &site.shop www.shop.net
  5.  
  6. site:
  7. slogan:
  8. *site.user: everyone is great!
  9. *site.shop: buy anything you want!
  10.  
 

其實際效果如:

 
  1. site:
  2. url:
  3. user: www.user.net
  4. shop: www.shop.net
  5.  
  6. site:
  7. slogan:
  8. www.user.net: everyone is great!
  9. www.shop.net: buy anything you want!
 

說明:用&定義錨點時,注意錨點名前後的空格。

另一個僅引入值例子:

 
  1. color:
  2. - &red-color red
  3. - yellow
  4. - blue
  5. - *red-color
  6. - gray
 

其實際效果如:

 
  1. color:
  2. - red
  3. - yellow
  4. - blue
  5. - red
  6. - gray
 

參考文檔:

七、引用

錨點&和別名*,可以用來引用。


defaults: &defaults
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  <<: *defaults

test:
  database: myapp_test
  <<: *defaults

等同於下面的代碼。


defaults:
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  adapter:  postgres
  host:     localhost

test:
  database: myapp_test
  adapter:  postgres
  host:     localhost

&用來建立錨點(defaults),<<表示合併到當前數據,*用來引用錨點。

下面是另一個例子。


- &showell Steve 
- Clark 
- Brian 
- Oren 
- *showell 

轉爲 JavaScript 代碼如下。


[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]

八、函數和正則表達式的轉換

這是 JS-YAML 庫特有的功能,可以把函數和正則表達式轉爲字符串。


# example.yml
fn: function () { return 1 }
reg: /test/

解析上面的 yml 文件的代碼如下。


var yaml = require('js-yaml');
var fs   = require('fs');

try {
  var doc = yaml.load(
    fs.readFileSync('./example.yml', 'utf8')
  );
  console.log(doc);
} catch (e) {
  console.log(e);
}

從 JavaScript 對象還原到 yaml 文件的代碼如下。


var yaml = require('js-yaml');
var fs   = require('fs');

var obj = {
  fn: function () { return 1 },
  reg: /test/
};

try {
  fs.writeFileSync(
    './example.yml',
    yaml.dump(obj),
    'utf8'
  );
} catch (e) {
  console.log(e);
}

九、參考鏈接

yaml文件的 錨點& 與 引用*

簡介

  1. 當yaml文件中出現多個重複內容時,可以通過 錨點& 與引用* ,實現引用錨點處內容的功能,從而在修改時,只需要修改錨點處的內容,即可在所有引用處生效
  2. 參考網址:http://www.ruanyifeng.com/blog/2016/07/yaml.html?f=tt

兩種方式實現

通過 << 符號

  1. 如在erver對redis的訪問配置中,針對不同的db可能會寫成如下配置:
    user:
    	host: 127.0.0.1
    	db: 8
    	
    book:
    	host: 127.0.0.1
    	db: 9
    	
    comment:
    	host: 127.0.0.1
    	db: 10
    其實host配置都是一樣的,只有db不一樣,所以我們通過錨點和引用的功能,可以寫成如下:
    localhost: &localhost1
    	host: 127.0.0.1
    user:
    	<<: *localhost1
    	db: 8
    	
    book:
    	<<: *localhost1
    	db: 9
    	
    comment:
    	<<: *localhost1
    	db: 10

其中,&表示將localhost1作爲localhost的別名,標識取別名localhost1對應的value,<<表示將localhost1代表的map合併入當前map數據。、

不通過 << 符號

  1. 如上的第一個示例,直接通過名字進行鍵值對應,也是可以的;
    localhost: 
    	host: &host 127.0.0.1
    user:
    	host: *host
    	db: 8
    	
    book:
    	host: *host
    	db: 9
    	
    comment:
    	host: *host
    	db: 10

即,直接在鍵後設置錨點,然後空格設置值,這樣在引用時,只引用值,而鍵名可以自己設置,不用和錨點一致。

注意:

1. 錨點必須設置在引用之前 2. 如果一個yaml文件中,有多個相似模塊,要注意錨點的命名,防止引用錯誤(錨點的引用時全局性的,只分文件,不分模塊) 3. 錨點處的值不能爲引用值,必須爲具體值。

 

通過變量引用設置配置量的【值(value)】

在YAML文件中,一個配置量的可以通過引用另一個變量來設置。例如:

default-db:
  port: 3306

user-db:
  port: ${default-db.port}

但是,如果想通過變量引用設置,通過${}是做不到的。例如:

site:
  url:
    user: www.user.net
    shop: www.shop.net

site:
  slogan:
    ${site.url.user}: everyone is great!
    ${user.url.shop}: buy anything you want!

在將配置讀入程序中之後,你會發現上述的${}引用,並沒有替換成真正的值。

通過錨點引用設置配置量的【鍵(key)】

要想替換鍵,則需要用到錨點。錨點用符號“&”定義,並用符號“*”進行引用。
錨點有兩種使用方式,一是通過“<<:”將鍵值對一起引入

default-db: &default-db-config
  host: 127.0.0.1
  port: 3306

user-db:
  <<: *default-db-config

其實際效果如:

default-db:
  host: 127.0.0.1
  port: 3306

user-db:
  host: 127.0.0.1
  port: 3306

說明:&後面的錨點名字,可自己定義,不必與配置量的鍵相同。

另一種是僅引入配置的值

site:
  url:
    user: &site.user www.user.net
    shop: &site.shop www.shop.net

site:
  slogan:
    *site.user: everyone is great!
    *site.shop: buy anything you want!

其實際效果如:

site:
  url:
    user: www.user.net
    shop: www.shop.net

site:
  slogan:
    www.user.net: everyone is great!
    www.shop.net: buy anything you want!

說明:用&定義錨點時,注意錨點名前後的空格。

另一個僅引入值例子:

color:
  - &red-color red
  - yellow
  - blue
  - *red-color
  - gray

其實際效果如:

color:
  - red
  - yellow
  - blue
  - red
  - gray

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章