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

WSL下Hardhat使用ES模块import导入chai报错求助

解决Hardhat ES模块兼容问题的步骤

首先,必须提供具体报错信息——不同的报错(比如Cannot use import statement outside a module、模块解析错误等)对应完全不同的修复方向,贴出完整报错能大幅提升排查效率。

如果暂时无法获取报错,先按以下通用步骤逐一排查:

1. 同步Hardhat配置文件的模块格式

若package.json中已设置"type": "module",你的hardhat.config.js必须同步改为ES模块语法,不能再使用require:

// hardhat.config.js
import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";

const config = {
  solidity: "0.8.20", // 替换为你的合约编译版本
};

export default config;

2. 适配测试文件的模块解析规则

在type: module的项目中,Mocha(Hardhat默认测试框架)对ES模块的支持需要额外配置:

  • 方案一:将测试文件扩展名改为.mjs
  • 方案二:在hardhat.config.js中添加Mocha配置,需先安装esm包:
npm install esm --save-dev

然后修改配置文件:

// 追加到hardhat.config.js的config对象中
mocha: {
  require: ["esm"]
}

3. 强制更新依赖并清理缓存

执行以下命令确保所有依赖为最新兼容版本:

npm update hardhat @nomicfoundation/hardhat-toolbox chai

随后删除依赖缓存并重新安装:

rm -rf node_modules package-lock.json
npm install

4. 用极简测试验证模块配置

先编写一个排除合约代码干扰的基础测试,确认ES模块本身能正常运行:

// test/esm-check.js
import { expect } from 'chai';

describe("ES Module Basic Test", function(){
    it("Should pass simple arithmetic check", function () {
        expect(1+2).to.equal(3);
    })
})

运行npx hardhat test,若该测试报错,说明问题出在模块配置而非合约代码;若通过,再排查safeHeiro合约的方法定义、部署逻辑是否存在问题。

5. 临时回退到CommonJS(兼容性最优方案)

若ES模块配置始终无法解决问题,可暂时切换回Hardhat官方默认的CommonJS规范:

  • 删除package.json中的"type": "module"字段
  • 将测试脚本改回require语法:
const {ethers} = require("hardhat")
const {expect} = require("chai")

describe("SafeHeiro Base Implementation", function(){
    it("Should correctly assign the value '3' to 'Test' key", async function () {
        const safeHeiro = await ethers.deployContract('safeHeiro')
        await safeHeiro.waitForDeployment() 
        await safeHeiro.callThis()

        expect(await safeHeiro.getValueOfThis()).to.equal(3)
    })
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 23:08:17