Node.js 带标签的js yaml问题

Node.js 带标签的js yaml问题,node.js,yaml,Node.js,Yaml,我目前正在尝试编辑yaml文件中的2条消息,但js yaml似乎不明白如何处理我认为第一行上的标记: --- !Status Default: Description: - |- Message1 Message2 Samples: Multiple: false DynamicPlayers: false Unknown: PlayerName: player PlayerCount: '?

我目前正在尝试编辑yaml文件中的2条消息,但js yaml似乎不明白如何处理我认为第一行上的标记:

--- !Status
Default:
    Description:
        - |-
            Message1
            Message2
Samples:
    Multiple: false
    DynamicPlayers: false
Unknown:
    PlayerName: player
    PlayerCount: '???'
Favicon:
    Timeout: 10s
    RecursiveFolderSearch: false
    ResizeStrategy: SCALE
当我安全加载文档时,我得到:
YAMLException:未知标记!在第17行第1列:
我有没有办法让它忽略标记,或者有没有其他方法解决这个问题?我无法删除标记,因为这样会阻止程序读取配置文件。

请查看js yaml repo中的内容。解决方案是创建一个新的
jsyaml.Type
,告诉jsyaml处理
!状态
值作为映射,如下所示:

let StatusYamlType = new jsyaml.Type('!Status', { kind: 'mapping' });
然后,您需要创建一个新的模式,其中包括
StatusYamlType
类型:

let STATUS_SCHEMA = jsyaml.Schema.create([ StatusYamlType ]);
最后,通过
SCHEMA
选项将新的
STATUS\u SCHEMA
传递给
jsyaml.safeLoad

jsyaml.safeLoad(doc, { schema: STATUS_SCHEMA });
不幸的是,似乎没有办法让js yaml忽略所有标记,所以如果遇到其他标记,也必须为它们定义类型

如果您还想用
编写YAML文件!Status
标记然后您必须实际定义一个Status原型,并向
jsyaml.Type
构造函数提供
construct
instanceOf
选项。一个非常基本的实现如下所示:

function Status(data) {
  Object.assign(this, data);
}

let StatusYamlType = new jsyaml.Type('!Status', {
  kind: 'mapping',
  instanceOf: Status,
  construct: data => new Status(data),
});
然后将模式传递给
jsyaml.safeDump
,就像传递给
safeLoad
一样:

jsyaml.safeDump(result, { schema: STATUS_SCHEMA })
看看下面的代码片段,看看它的实际作用

让doc=`--!地位
违约:
说明:
- |-
信息1
信息2
# ...
`;
功能状态(数据){
分配(此,数据);
}
让StatusYamlType=new jsyaml.Type(“!Status”{
种类:'映射',
instanceOf:状态,
构造:数据=>新状态(数据),
});
让STATUS_SCHEMA=jsyaml.SCHEMA.create([StatusYamlType]);
让result=jsyaml.safeLoad(doc,{schema:STATUS_schema});
console.log(result.constructor.name,result);
log(jsyaml.safeDump(结果,{schema:STATUS_schema}))

在Visual Studio代码中编辑AWS云形成模板时,我遇到了同样的问题

我发现,在用户设置中,如果我在user-settings.json中添加以下代码行,就允许标记

    "yaml.customTags": [
        "!Equals sequence",
        "!FindInMap sequence",
        "!GetAtt",
        "!GetAZs",
        "!ImportValue",
        "!Join sequence",
        "!Ref",
        "!Select sequence",
        "!Split sequence",
        "!Sub"
    ]
你的将遵循同样的结构<代码>“!状态序列”


这会告诉YAML配置确切的预期内容。

在哪里可以找到用户设置。json?Mac:Code>Preferences>settings。。。在页面的右上角有一个
{}
,这将使您以JSON的形式进入设置。添加此块并保存更改。我想除了顶部的菜单栏之外,Windows的体验是类似的。我会在编辑>首选项下进行检查。VSCode的?我希望在命令行上使用jsyaml来读取云形成模板。谢谢