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

使用@walletconnect/client报is not a constructor错误如何解决

错误诱发原因
  • 核心原因是@walletconnect/client版本迭代带来的导出规则不兼容:1.x版本为CommonJS默认导出,直接导入即可拿到构造函数;2.x版本为ESM规范导出,且做了大量API破坏性变更,使用require()直接导入时拿到的是模块元对象,不存在可直接实例化的构造函数,调用new就会抛出该错误。另外官方v2版本已将核心连接能力拆分到@walletconnect/sign-client包,原@walletconnect/clientv2版本API和v1完全不通用。
  • 少数情况是项目构建配置的模块解析逻辑异常,比如打包工具错误处理ESM与CommonJS的转换规则,导致导入的内容和预期不符。
排查与修复步骤
  • 第一步先确认本地安装的包版本,执行以下命令查看版本号:
npm ls @walletconnect/client
  • 如果版本号为1.x开头:检查是否存在模块别名、路径映射配置导致导入的不是包本身的默认导出,可先删除node_modules目录和包锁文件(package-lock.json/yarn.lock/pnpm-lock.yaml),重新执行依赖安装命令后重试。
  • 如果版本号为2.x开头,根据业务需求二选一修复:
    1. 适配v2官方推荐方案:卸载旧包,安装v2核心依赖包
    npm uninstall @walletconnect/client
    npm install @walletconnect/sign-client
    
    注意v2初始化是异步方法,不能直接同步new实例,参考代码如下:
    // ESM环境导入
    import SignClient from '@walletconnect/sign-client'
    // CommonJS环境导入需要取default属性
    // const SignClient = require('@walletconnect/sign-client').default
    
    const createConnector = async () => {
      const connector = await SignClient.init({
        projectId: '你的WalletConnect项目ID',
        // 其余配置按业务需求填写
      })
      // 传入连接uri完成配对
      await connector.pair({ uri })
      return connector
    }
    
    1. 沿用v1版本写法:将包降级到v1最后一个稳定版本即可,不需要修改原有业务代码
    npm install @walletconnect/client@1.8.0
    
  • 如果重新安装依赖、调整版本后仍报错,检查打包工具(Webpack/Vite/Rollup等)的模块解析配置,关闭对@walletconnect相关包的强制模块转换规则,避免篡改包的原生导出结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:48:17