是否可以使用js-yaml来加载一个属性设置为文件引用的yaml文件?



我试图使用js-yaml将yml文件导入到js文件中。主yml文件包含在另一个文件中引用的变量。
我正试图找到一种方法来导入这些额外引用的值,但是当我使用safload或load时,文件只加载引用(而不是实际值)。

下面是文件的样子、预期结果和实际结果。

谢谢你的帮助!

主要。yml文件

otherAttribute:
bar: 'foo'
custom: ${file(otherFile.yml)}

RotherFile。yml文件

key1: value
key2: value

js文件

yaml = require("js-yaml");
var example = yaml.load(fs.readFileSync("./main.yml", "utf8"));
console.log('value of example read in via yaml.load',example);

期望输出值

otherAttribute:
bar: 'foo'
custom:
key1: value
key2: value

实际输出

otherAttribute:
bar: 'foo'
custom: ${file(otherFile.yml):${self:otherAttribute.bar}}

您在main.yml(${file(otherFile.yml)})中使用的文件引用语法是无服务器框架的一个特性,而不是YAML。YAML不支持任何引用或包含,参见这个SO问题。

我上面链接的问题的一个答案建议使用PyYAML实现包含的Python版本,可以在这里找到。这可以很容易地修改为支持${file(...)}而不是!include ...

所以,除非你想破解js-yaml,使其理解${file(...)}引用,否则最简单的方法可能是遵循Python方法。

最新更新