我正在努力将Solidity代码编译到构建文件夹中。我正在使用节点的文件系统来执行此操作,但缺少某些内容。目前,我收到此错误:
fs.js:663
return binding.open(pathModule.toNamespacedPath(path),
^
Error: ENOENT: no such file or directory, open '/Users/Gary/Desktop/charity/ethereum/build/Charity.json'
at Object.fs.openSync (fs.js:663:18)
at Object.fs.writeFileSync (fs.js:1314:33)
at Object.<anonymous> (/Users/Gary/Desktop/charity/ethereum/compile.js:37:12)
at Module._compile (module.js:641:30)
at Object.Module._extensions..js (module.js:652:10)
at Module.load (module.js:560:32)
at tryModuleLoad (module.js:503:12)
at Function.Module._load (module.js:495:3)
at Function.Module.runMain (module.js:682:10)
at startup (bootstrap_node.js:191:16)
我尝试在此处遵循示例:
How to compile solidity using solc 0.5
我的compile.js文件如下所示
const path = require('path');
const solc = require('solc');
const fs = require('fs-extra');
const buildPath = path.resolve(__dirname, 'build');
fs.removeSync(buildPath);
const charityPath = path.resolve(__dirname, 'contracts', 'Charity.sol');
const source = fs.readFileSync(charityPath, 'utf8');
var input = {
language: 'Solidity',
sources: {
'Charity.sol': {
content: source
}
},
settings: {
outputSelection: {
'*': {
'*': [ '*' ]
}
}
}
}
const output = JSON.parse(solc.compile(JSON.stringify(input)));
if(output.errors) {
output.errors.forEach(err => {
console.log(err.formattedMessage);
});
} else {
const contracts = output.contracts["Charity.sol"];
for (let contractName in contracts) {
const contract = contracts[contractName];
fs.writeFileSync(path.resolve(buildPath, `${contractName}.json`), JSON.stringify(contract.abi, null, 2), 'utf8');
}
}
我希望每次编译时都销毁并更新build
文件夹。 build
文件夹将进入ethereum
文件夹。我期望从那里编译Charity.sol
中的Solidity代码,并将其以JSON格式存储为build
文件夹中的文件。
相反,我遇到了以上错误。我相信这是由于对文件系统的基本误解所致。但是,我感谢任何愿意花时间查看此内容的人。我可以根据要求提供更多信息。