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

 

posted @ 2024-02-27 11:13  CharyGao  阅读(998)  评论(0编辑  收藏  举报