You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lambda运行报错yaml.DEFAULT_SCHEMA.extend is not a function的解决求助

解决YAML Schema.extend 不是函数的错误

你遇到的问题是因为所用的yaml库版本为v2+,这个版本完全重构了API,原有的DEFAULT_SCHEMA.extend和Schema.extend方法已经被移除,需要使用新的自定义Schema方式。

解决方案

方法1:适配yaml v2+ API(推荐)

yaml v2使用yaml.Type定义自定义标签,再通过yaml.Schema.create()组合默认Schema与自定义类型,具体修改如下:

const yaml = require('yaml');
const fs = require('fs');

// 定义自定义标签类型
const customTagType = new yaml.Type('!CustomYamlTag', {
  kind: 'mapping', // 根据你的数据结构调整:mapping(对象)/scalar(单值)/sequence(数组)
  construct: (data) => {
    // 解析YAML时的构造逻辑,返回CustomYamlTag实例
    return new CustomYamlTag(data.type, data.data);
  },
  // 若需要序列化YAML,添加represent方法
  represent: (obj) => {
    return { type: obj.type, data: obj.data };
  }
});

class CustomYamlTag {
    constructor(type, data) {
        this.type = type;
        this.data = data;
    }
}

// Lambda handler
exports.handler = event => {
    // logger.info('Event', event);
    // 创建包含自定义类型的Schema
    const SCHEMA = yaml.Schema.create([customTagType, yaml.DEFAULT_SCHEMA]);
    // v2推荐用parse替代load,功能一致
    let TemplateBody = yaml.parse(fs.readFileSync('templates/TEMPLATEFILE.yml', 'utf8'), { schema: SCHEMA });
    // ... 后续业务逻辑
};

方法2:降级到yaml v1.x(不推荐)

如果不想修改代码,可以降级到仍支持extend方法的v1版本:

npm install yaml@1.10.2

此方法仅作为临时方案,因为v1版本已停止维护,存在安全风险。

关键变化说明

  • v2中推荐使用yaml.parse()替代yaml.load()(load仍兼容,但parse更符合现代API命名)
  • 自定义标签需通过yaml.Type创建,而非原有的extend方式
  • 用yaml.Schema.create()组合Schema,替代原有的extend方法

内容的提问来源于stack exchange,提问作者raosa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 03:25:33