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

NextJS(TS)集成Web3AuthConnector遇CommonJS与ESM兼容错误求助

解决Web3AuthConnector在Next.js(TS)中的CommonJS/ESM兼容错误

问题核心

Web3Auth的Wagmi连接器CJS构建尝试加载Wagmi Core的ESM模块,导致模块系统冲突,常规的type:module和tsconfig调整无法解决,因为依赖包内部的模块引用方式不匹配。

解决方案步骤

1. 动态导入Web3AuthConnector(客户端组件专属)

由于Next.js的SSR特性,服务器端环境会触发同步require导致冲突,改用动态导入确保仅在客户端加载连接器。注意添加'use client'指令(App Router必须):

'use client';

import { useEffect, useState } from 'react';
import { useConnect } from 'wagmi';

export default function Web3AuthConnectButton() {
  const [web3AuthConnector, setWeb3AuthConnector] = useState(null);
  const { connect, isLoading } = useConnect();

  useEffect(() => {
    const initConnector = async () => {
      // 动态导入避免服务器端同步require
      const { Web3AuthConnector } = await import('@web3auth/web3auth-wagmi-connector');
      const connector = new Web3AuthConnector({
        clientId: '你的Web3Auth Client ID',
        web3AuthNetwork: 'sapphire_mainnet', // 或测试网如sapphire_testnet
        chainConfig: {
          chainId: '0x1', // 对应以太坊主网,按需修改
          rpcTarget: 'https://rpc.ankr.com/eth',
        },
      });
      setWeb3AuthConnector(connector);
    };

    initConnector();
  }, []);

  const handleConnect = () => {
    if (web3AuthConnector) {
      connect({ connector: web3AuthConnector });
    }
  };

  return (
    <button onClick={handleConnect} disabled={!web3AuthConnector || isLoading}>
      {isLoading ? '连接中...' : '通过Web3Auth登录'}
    </button>
  );
}

2. 调整Next.js配置转译Web3Auth相关包

在next.config.js中添加transpilePackages,强制Next.js转译Web3Auth的包,解决模块格式不兼容问题:

/** @type {import('next').NextConfig} */
const nextConfig = {
  transpilePackages: ['@web3auth/web3auth-wagmi-connector', '@web3auth/core', '@web3auth/base'],
  experimental: {
    esmExternals: 'loose', // 放宽ESM外部模块的处理限制
  },
};

module.exports = nextConfig;

3. 统一TS配置与模块系统

确保tsconfig.json的配置和package.json的type:module一致:

  • package.json:"type": "module"
  • tsconfig.json关键配置:
{
  "compilerOptions": {
    "target": "ESNext",
    "module": "ESNext",
    "moduleResolution": "NodeNext",
    "esModuleInterop": true,
    "isolatedModules": true
  }
}

4. 重置依赖缓存

清除旧依赖并重新安装,避免缓存导致的版本冲突:

rm -rf node_modules package-lock.json
npm install

额外注意事项

  • 若使用Next.js App Router,所有涉及Web3Auth/Wagmi的组件必须标记为客户端组件('use client')
  • 确认Web3Auth Client ID和链配置正确,链ID需用十六进制格式(如0x1对应以太坊主网)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:45:23