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

不同依赖版本下instanceof运算符返回false的原因排查

问题原因:重复安装的external-lib导致类实例判断失效

核心问题是你的项目里同时存在external-lib@1.0.0和external-lib@2.0.0两个独立的包副本——哪怕HttpException的代码完全没改,这两个版本里的HttpException在JS运行环境中是完全独立的构造函数,直接导致instanceof判断失效。

具体细节:

  • 当你升级my-server的external-lib到2.0.0后,npm会在my-server的依赖目录下安装2.0.0版本;而my-lib依赖的1.0.0版本会被单独安装(可能在my-lib/node_modules或者项目根目录的node_modules里,取决于npm版本和依赖解析规则)。
  • my-server抛出的HttpException实例,是由2.0.0版本的构造函数创建的;但my-lib里导入的HttpException是1.0.0版本的构造函数。
  • JavaScript的instanceof判断依赖原型链:只有实例的原型链上存在构造函数的prototype属性时才返回true。两个版本的HttpException虽然代码一致,但它们的prototype是不同的对象,所以captured instanceof HttpException会返回false。

你可以通过以下方式验证:

  • 在my-server和my-lib中分别打印import('external-lib').HttpException的toString()结果,会看到它们指向不同的模块路径。
  • 执行npm ls external-lib查看项目依赖树,能清晰看到两个版本同时存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 13:12:07