使用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
相关产品推荐
相关产品推荐

