使用useDapp+React开发DApp时遭遇ethers utils导出缺失错误求助
开发区块链交互Web应用,技术栈为Brownie(Solidity框架)+ ReactJS(前端),使用useDapp连接钱包时出现编译错误:
多个@usedapp/core相关文件报错:
export 'utils' (imported as 'utils') was not found in 'ethers' (possible exports: AbiCoder, AbstractProvider, AbstractSigner, AlchemyProvider, AnkrProvider, BaseContract, BaseWallet, Block, BrowserProvider, CloudflareProvider, ConstructorFragment, Contract, ContractEventPayload, ContractFactory, ContractTransactionReceipt, ContractTransactionResponse, EnsResolver, ErrorFragment, EtherSymbol, EtherscanProvider, EventFragment, EventLog, FallbackProvider, FeeData, FetchCancelSignal, FetchRequest, FetchResponse, FixedNumber, Fragment, FunctionFragment, HDNodeVoidWallet, HDNodeWallet, Indexed, InfuraProvider, Interface, IpcSocketProvider, JsonRpcApiProvider, JsonRpcProvider, JsonRpcSigner, LangEn, Log, LogDescription, MaxInt256, MaxUint256, MessagePrefix, MinInt256, Mnemonic, N, Network, NonceManager, ParamType, PocketProvider, QuickNodeProvider, Result, Signature, SigningKey, SocketProvider, Transaction, TransactionDescription, TransactionReceipt, TransactionResponse, Typed, TypedDataEncoder, Utf8ErrorFuncs, VoidSigner, Wallet, WebSocketProvider, WeiPerEther, Wordlist, WordlistOwl, WordlistOwlA, ZeroAddress, ZeroHash, accessListify, assert, assertArgument, assertArgumentCount, assertNormalize, assertPrivate, checkResultErrors, computeAddress, computeHmac, concat, dataLength, dataSlice, decodeBase58, decodeBase64, decodeBytes32String, decodeRlp, decryptCrowdsaleJson, decryptKeystoreJson, decryptKeystoreJsonSync, defaultPath, defineProperties, dnsEncode, encodeBase58, encodeBase64, encodeBytes32String, encodeRlp, encryptKeystoreJson, encryptKeystoreJsonSync, ensNormalize, ethers, formatEther, formatUnits, fromTwos, getAccountPath, getAddress, getBigInt, getBytes, getBytesCopy, getCreate2Address, getCreateAddress, getDefaultProvider, getIcapAddress, getNumber, getUint, hashMessage, hexlify, id, isAddress, isAddressable, isBytesLike, isCallException, isCrowdsaleJson, isError, isHexString, isKeystoreJson, isValidName, keccak256, lock, makeError, mask, namehash, parseEther, parseUnits, pbkdf2, randomBytes, recoverAddress, resolveAddress, ripemd160, scrypt, scryptSync, sha256, sha512, solidityPacked, solidityPackedKeccak256, solidityPackedSha256, stripZerosLeft, toBeArray, toBeHex, toBigInt, toNumber, toQuantity, toTwos, toUtf8Bytes, toUtf8CodePoints, toUtf8String, verifyMessage, version, zeroPadBytes, zeroPadValue)
涉及文件:
- ./node_modules/@usedapp/core/dist/esm/src/abi/multicall/constants.js
- ./node_modules/@usedapp/core/dist/esm/src/abi/multicall2/constants.js
- ./node_modules/@usedapp/core/dist/esm/src/constants/abi/index.js
- ./node_modules/@usedapp/core/dist/esm/src/helpers/address.js
当前App.tsx代码:
import React from 'react'; import logo from './logo.svg'; import './App.css'; import { DAppProvider, ChainId } from "@usedapp/core"; function App() { return ( <DAppProvider config={{ supportedChains: [ChainId.Goerli] }}> <div> Hello! </div> </DAppProvider> ); } export default App;
这个错误是useDapp版本与ethers版本不兼容导致的:ethers v6移除了utils导出模块,而旧版useDapp依赖ethers v5的utils功能。提供两种解决方式:
方式一:降级ethers到v5兼容版本
- 卸载当前ethers版本:
npm uninstall ethers # 或 yarn remove ethers
- 安装ethers v5.7.2(旧版useDapp适配的稳定版本):
npm install ethers@5.7.2 # 或 yarn add ethers@5.7.2
- 清理缓存并重新安装依赖:
rm -rf node_modules package-lock.json # yarn环境替换为yarn.lock npm install # 或 yarn install
方式二:升级useDapp到支持ethers v6的版本
若想保留ethers v6,需升级useDapp到支持v6的版本(v1.2.0及以上):
- 升级@usedapp/core:
npm install @usedapp/core@latest # 或 yarn add @usedapp/core@latest
- 同步更新所有useDapp相关依赖(如@usedapp/react等),确保版本一致。
- 重新编译项目,检查是否有代码适配问题(比如新版useDapp中ChainId枚举可能有调整,需对应修改代码)。
内容的提问来源于stack exchange,提问作者Ahmed Laggoun

