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

Web3 v1.2.11导入报错:Cannot read properties of undefined (reading 'providers')

解决Web3 1.2.11在TypeScript中导入后web3_1.default未定义的问题

问题详情

报错提示:

Cannot read properties of undefined (reading 'providers')

使用TypeScript导入Web3 1.2.11版本时,编写代码如下:

import Web3 from 'web3'
const readonlyProvider = new Web3.providers.HttpProvider(providerURL)

编译为JavaScript后代码变为:

const readonlyProvider = new web3_1.default.providers.HttpProvider(providerURL);

此时控制台提示web3_1.default未定义,进而触发上述报错。

问题原因

Web3 1.x版本采用CommonJS规范导出模块,而TypeScript默认的ES模块导入语法会尝试读取default导出,但Web3并没有提供default导出,导致编译后的代码找不到对应属性。

解决方法

方法1:改用命名导入

修改TypeScript的导入语句为命名导入形式,直接引用整个模块:

import * as Web3 from 'web3';
const readonlyProvider = new Web3.providers.HttpProvider(providerURL);

这样编译后的代码会直接使用web3_1而非web3_1.default,就能正常访问providers属性。

方法2:调整TypeScript配置

在项目的tsconfig.json中开启allowSyntheticDefaultImports和esModuleInterop选项:

{
  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    // 保留其他原有配置
  }
}

这两个选项会让TypeScript自动兼容CommonJS模块的导入,无需修改原有导入代码即可解决问题。

方法3:实例化Web3后使用关联provider

如果场景允许,也可以先创建Web3实例,直接关联provider使用:

import Web3 from 'web3';
const web3 = new Web3(providerURL);
// 后续可直接使用web3实例调用相关方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:42:09