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

使用node fs库编译Solidity时出现No such file directory报错

问题解决方案

报错ENOENT: no such file or directory的核心原因是Node.js无法在指定路径读取到Incrementer.sol文件,按以下步骤排查即可解决:

1 核对文件信息

  • 进入/Users/amstriker/Desktop/Sdax/OnePlace/contracts目录,执行ls命令确认目录下存在文件名严格为Incrementer.sol的文件:
    • 注意大小写拼写,不要有多余空格、不要把后缀存为.sol.txt
    • 如果文件名有误,直接修改为正确名称即可

2 核对命令执行路径

必须在compile.js所在的contracts目录下执行命令,不要在上级目录直接运行:

cd /Users/amstriker/Desktop/Sdax/OnePlace/contracts
node compile.js

3 优化路径读取逻辑

如果以上两步操作后仍报错,替换compile.js的路径读取部分代码,增加路径校验逻辑方便定位问题:

const fs = require('fs');
const solc = require('solc');
const path = require('path');

// 打印路径用于排查
console.log('当前工作目录:', process.cwd());
const inboxPath = path.join(__dirname, 'Incrementer.sol');
console.log('尝试读取的合约路径:', inboxPath);

// 先校验文件是否存在再读取
if (!fs.existsSync(inboxPath)) {
  console.error('ERROR:指定路径下不存在Incrementer.sol文件,请核对路径');
  process.exit(1);
}
const source = fs.readFileSync(inboxPath, 'utf8');

// 后续编译逻辑保持不变
const input = {
   language: 'Solidity',
   sources: {
      'Incrementer.sol': {
         content: source,
      },
   },
   settings: {
      outputSelection: {
         '*': {
            '*': ['*'],
         },
      },
   },
};
const tempFile = JSON.parse(solc.compile(JSON.stringify(input)));
const contractFile = tempFile.contracts['Incrementer.sol']['Incrementer'];

module.exports = contractFile;

改完后重新运行命令,根据打印的路径信息核对即可定位问题。

4 排查权限问题

不要使用sudo或root身份运行node命令,避免权限不足无法读取普通用户目录下的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:12:04