使用StandardSkillBuilder报错:Alexa.SkillBuilders.standard不是函数
解决:Alexa.SkillBuilders.standard is not a function 错误
问题根源
你遇到的错误本质是依赖版本不兼容+API调用方式不对:
- 你的
ask-sdk@2.14.0和ask-sdk-core@2.7.0版本差距过大,v2.x的ask-sdk不同小版本间API存在差异。 - 在你使用的这个早期v2版本里,
StandardSkillBuilder要么还没被加入Alexa.SkillBuilders,要么根本不是通过该方式调用的。
可行解决方案
1. 统一依赖版本并修正调用方式
先把ask-sdk和ask-sdk-core的版本统一为同一个v2.x稳定版(比如升级到2.20.0),避免版本混乱。然后修正构建器的导入和调用代码:
const { SkillBuilders } = require('ask-sdk'); const standardSkillBuilder = SkillBuilders.standard();
注意是从ask-sdk包导入SkillBuilders,而非通过Alexa.SkillBuilders调用。
2. 无需更换构建器,用CustomSkillBuilder适配托管技能
既然你之前用CustomSkillBuilder配合DynamoDB能正常工作,针对托管技能无法配置默认表的问题,手动指定表名即可,完全不用更换构建器:
const { CustomSkillBuilder, DynamoDbPersistenceAdapter } = require('ask-sdk'); const persistenceAdapter = new DynamoDbPersistenceAdapter({ tableName: '你的自定义表名', createTable: true // 需要自动建表就开启这个配置 }); const skillBuilder = CustomSkillBuilder() .withPersistenceAdapter(persistenceAdapter);
3. 清理重复依赖
尽量不要同时导入ask-sdk和ask-sdk-core,优先使用完整的ask-sdk包,避免模块冲突导致的异常。
补充说明
ask-sdk v3.x的构建器API有较大改动,但你使用的是v2.x版本,无需考虑v3的语法。这类“函数不存在”的错误,绝大多数都是版本不兼容或导入调用方式错误导致的,统一依赖版本是最直接的解决思路。
内容的提问来源于stack exchange,提问作者So.Vanara
相关产品推荐
相关产品推荐

