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

Hardhat网络部署智能合约报错:TypeError: Cannot read properties of undefined (reading 'getContractFactory')求助

解决Hardhat部署合约时的TypeError: Cannot read properties of undefined (reading 'getContractFactory')

嘿,我刚踩过几乎一模一样的坑,给你拆解下问题根源和修复步骤:

首先,这个报错的核心是ethers对象没被正确初始化,导致调用getContractFactory时找不到它。另外你的代码里还有个异步操作的小问题,我一起给你修正:

问题1:异步操作未正确等待

你调用SimpleStorageFactory.deploy()的时候没加await,这会导致simpleStorage是个Promise对象,后续的deployed()调用肯定会出问题——不过这不是当前报错的直接原因,但必须一起修复。

问题2:ethers对象未被正确加载

最常见的原因是你直接用node命令运行部署脚本了,而不是通过Hardhat的CLI来执行。Hardhat的ethers模块依赖它的专属运行环境,直接用node运行的话这个环境没被初始化,ethers自然就是undefined。

修复后的完整代码

把你的部署脚本改成这样:

const { ethers } = require("hardhat");

async function main() {
  const SimpleStorageFactory = await ethers.getContractFactory("SimpleStorage");
  console.log("Deploying....");
  // 这里必须加await,deploy是异步方法
  const simpleStorage = await SimpleStorageFactory.deploy();
  // 等待合约完全部署完成
  await simpleStorage.deployed();
  console.log(`合约部署完成,地址是:${simpleStorage.address}`);
}

// 别忘了处理异步错误,避免脚本异常挂掉
main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });

正确的运行方式

别用node scripts/你的部署文件名.js,改用Hardhat命令:

npx hardhat run scripts/你的部署文件名.js --network hardhat

如果省略--network hardhat,默认就是用Hardhat本地测试网,完全没问题。

额外排查点

如果还是报错,试试把导入语句改成这样,明确从Hardhat运行环境(hre)里获取ethers:

const hre = require("hardhat");
const ethers = hre.ethers;

有时候这种方式能解决版本兼容的小问题。另外确保你的项目根目录有hardhat.config.js,里面至少配置了solidity版本,比如:

module.exports = {
  solidity: "0.8.19", // 换成你合约实际使用的版本
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:32:34