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

读取Truffle合约ABI文件时提示File not found错误如何解决

错误原因

Error: ENOENT: no such file or directory属于文件读取路径匹配错误,具体诱因有两点:

  • Node.js的fs模块解析./开头的相对路径时,基准路径是执行node命令时终端所在的工作目录,不是当前运行的JS脚本自身的存放目录。从项目结构看,build目录位于src文件夹下,如果你在项目根目录执行脚本,原代码里的./build/contracts/QUAD_EK.json会指向根目录下的build文件夹,和实际文件位置不匹配。
  • 原代码存在隐藏逻辑问题:Truffle编译输出的合约JSON文件中,存储ABI的字段名是abi,不是自定义的token_abi,就算路径修复完成,这行解构代码也会拿到undefined。
修复方法

优先推荐第一种不受执行目录影响的方案:

方案1:基于脚本位置拼接绝对路径

引入Node.js内置的path模块,用__dirname(代表当前脚本所在目录的绝对路径)拼接目标文件路径,完全不受终端执行位置影响:

const Web3 = require('web3')
const fs = require('fs')
const path = require('path')
// 如果当前脚本和src下的build目录同级,直接用下面的路径即可;如果脚本位置有变动,调整path.resolve里的相对层级
const contractFilePath = path.resolve(__dirname, './build/contracts/QUAD_EK.json')
const { abi: token_abi } = JSON.parse(fs.readFileSync(contractFilePath, 'utf8'))

方案2:调整相对路径适配执行目录

如果你固定在项目根目录执行脚本(比如执行命令为node src/你的脚本文件名.js),可以直接把路径改成根目录视角的相对路径:

const Web3 = require('web3')
const fs = require('fs')
const { abi: token_abi } = JSON.parse(fs.readFileSync('./src/build/contracts/QUAD_EK.json', 'utf8'))

注意:该方案稳定性差,如果切换到src目录下执行脚本,路径会再次失效,不推荐长期使用。

前置检查

如果调整路径后仍然报错,先确认你已经执行过Truffle编译命令,只有编译完成才会生成对应合约的JSON文件:

truffle compile

编译完成后可以手动进入对应build/contracts目录,确认QUAD_EK.json文件存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:15:28