如何使用节点文件系统编译Solidity代码?

时间:2019-05-07 02:21:58

标签: javascript solidity

我正在努力将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文件夹中的文件。

相反,我遇到了以上错误。我相信这是由于对文件系统的基本误解所致。但是,我感谢任何愿意花时间查看此内容的人。我可以根据要求提供更多信息。

0 个答案:

没有答案