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

调用metaplex.nfts().uploadMetadata()报Bundlr客户端非构造函数错误

问题根因

这个报错是Bundlr客户端版本和Metaplex JS SDK依赖版本不兼容导致的:高版本Bundlr客户端修改了模块导出规则,Webpack打包时无法正确识别其构造函数,就会抛出你看到的错误。
你提到findNftByMint接口能正常调用也符合这个逻辑——这个接口只做链上数据读取,完全不会调用Bundlr存储相关的代码,自然不会触发依赖冲突。

修复方案

按以下顺序尝试,优先用第一个方案,绝大多数场景下都能解决:

  • 锁定Bundlr客户端到兼容版本
    目前你用的Metaplex JS SDK版本兼容的Bundlr客户端版本是0.8.9,直接装最新版Bundlr必然会触发导出冲突。执行对应包管理工具的命令安装指定版本:
    # npm用户
    npm install @bundlr-network/client@0.8.9
    # yarn用户
    yarn add @bundlr-network/client@0.8.9
    
    安装完成后删掉node_modules文件夹、对应的锁文件(package-lock.json或yarn.lock),重新执行依赖安装命令,重启开发服务即可。
  • 临时替换存储适配器做功能验证
    如果锁版本后仍有打包异常,可以先用SDK内置的测试存储适配器跳过Bundlr配置,先把NFT元数据上传的逻辑跑通,代码修改如下:
    // 先从SDK引入mockStorage方法
    import { mockStorage } from "@metaplex-foundation/js";
    
    const metaplex = Metaplex.make(connection)
     .use(keypairIdentity(fromWallet))
     // 替换掉原来的bundlrStorage配置
     .use(mockStorage())
    
    注意这个适配器仅适合本地开发测试,不存储真实数据,上线主网必须换回正式存储服务。
  • 补充Webpack polyfill配置(前端框架场景适用)
    如果是在React/Vue等前端项目中运行代码,Webpack5默认移除了Node.js核心模块的polyfill,也可能触发Bundlr客户端加载异常,以Create React App项目为例,可以通过craco修改webpack配置,补充如下规则:
    module.exports = {
      webpack: {
        configure: (config) => {
          config.resolve.fallback = {
            ...config.resolve.fallback,
            fs: false,
            path: false,
            crypto: false,
          };
          return config;
        },
      },
    };
    
避坑提示
  • 不要移除keypairIdentity相关配置:上传元数据需要钱包签名权限,移除后报钱包未定义是正常逻辑,这个方向的排查是无效的
  • 测试时确保你生成的随机测试钱包在devnet有足够的测试SOL,否则即使解决了构造函数报错,后续也会因为余额不足触发上传失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:42:15