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

@smithy/smithy-client的ServiceException instanceof判断失效问题求助

问题原因及解决方案

核心原因:重复依赖导致类实例不匹配

当你的私有npm包和使用它的项目分别安装了@smithy/smithy-client时,会存在两个完全独立的ServiceException类实例。项目中抛出的InvalidParameterException继承的是项目依赖里的ServiceException,而你的包代码里判断的是包自身依赖的ServiceException,两者原型链不重合,instanceof自然返回false。

其他可能原因

  • 打包配置问题:如果包打包时启用了某些模块转换(比如ES转CommonJS的特殊处理),可能破坏类的原型继承结构,导致instanceof判断失效。
  • 版本不一致:包和项目中@smithy/smithy-client版本差异过大,可能导致ServiceException类结构变化,影响继承关系判断。

解决方案

  1. 将@smithy/smithy-client设为peer依赖
    在私有包的package.json中,把@smithy/smithy-client从dependencies移到peerDependencies,指定版本范围:
{
  "peerDependencies": {
    "@smithy/smithy-client": "^x.y.z"
  }
}

这样项目会统一使用自身安装的依赖,避免重复安装,保证ServiceException类的唯一性。

  1. 检查打包配置
  • 使用Rollup或Webpack时,避免开启会破坏类原型的转换插件,比如过度压缩的配置。
  • 保持包的模块格式与项目一致(比如都用ES模块),防止转换过程中丢失类的继承信息。
  1. 替代方案:基于属性判断而非instanceof
    若上述方案无法解决,可通过错误对象的特征属性判断(AWS SDK异常通常带有$metadata和name):
try {
    return await this.client.send(command, options)
} catch (error: unknown) {
    if (typeof error === 'object' && error !== null && '$metadata' in error && 'name' in error) {
        throw this.handleError(error as ServiceException)
    }
    throw new ClientError('Unknown error', 500)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:38:12