Hardhat从.env导入API_URL和私钥时编译部署报错问题
问题排查与解决步骤
- 首先修正变量名不匹配的问题
错误日志明确提示ReferenceError: API_KEY is not defined,但你.env文件中定义的变量是API_URL,请检查hardhat.config.js第37行的代码,确认是否将变量名误写为API_KEY,和.env中的定义保持一致即可解决这个报错。 - 检查dotenv依赖是否安装
运行如下命令安装dotenv依赖:npm install dotenv --save-dev - 确认
.env文件的位置与命名.env文件必须存放在项目根目录,和hardhat.config.js处于同一级文件夹,文件名必须为.env(开头的点不能省略,也不能加其他后缀),macOS系统默认隐藏带点前缀的文件,可以在项目根目录执行ls -a命令确认文件存在。 - 修正
.env文件语法
建议去掉变量定义中等号两侧的空格,以及字符串两侧的引号,避免解析异常,修改后的.env内容如下:API_URL=https://ethropsten.alchemyapi.io/v2/UkW3oySI7WxvFwDwopQHPOHajHaWFZFv PRIVATE_KEY=8d33c2613cb63d0dc6305e57... - 强制指定
.env文件读取路径
可以修改dotenv的引入代码,强制指定读取当前目录下的.env文件,避免路径解析异常:
你也可以在引入dotenv后加入一行打印代码,验证变量是否读取成功:require('dotenv').config({ path: __dirname + '/.env' });
执行console.log('读取到的环境变量:', process.env.API_URL, process.env.PRIVATE_KEY);npx hardhat compile查看终端输出即可确认变量是否正常加载。 - 私钥格式校验
.env中的私钥请填写原生64位十六进制字符串,不要加0x前缀,你的配置中已经通过0x${PRIVATE_KEY}自动拼接了前缀,重复添加会导致账户格式错误。 - 额外提示:Ropsten测试网已经正式废弃,即使环境变量配置正确也无法完成部署,建议将测试网切换为Sepolia或者Goerli,替换对应节点的API_URL即可。
内容的提问来源于stack exchange,提问作者Simon Cosmos
相关产品推荐
相关产品推荐

