Не удается разрешить файл с помощью скрипта компиляции с использованием path.resolve Node Js - PullRequest
0 голосов
/ 29 октября 2018

У меня возникла проблема при запуске сценария компиляции для создания JSON для развертывания Solidness.

Обычно, когда я пытаюсь импортировать внешний файл, все они должны находиться в одной папке. если я пытаюсь импортировать файл вне структуры папок, я могу сделать это в файле Solidity, но solc.compile вызывает ошибки.

errors: [ 'Leaderboard.sol:3:1: ParserError: Source "math/SafeMath.sol" not found: File not supplied initially.\nimport "../math/SafeMath.sol";\n^----------------------------^\n' ], sourceList: [ 'Leaderboard.sol', 'SafeMath.sol' ], sources: {} }

Код следующий:

const path = require("path");
const solc = require("solc");
const fs = require("fs-extra");

const buildPath = path.resolve(__dirname, "build");

// Remove build folder.
fs.removeSync(buildPath);

const leaderboardPath = path.resolve(__dirname, "contracts", "leaderboard", "Leaderboard.sol");
const safeMathPath = path.resolve(__dirname, "contracts", "leaderboard", "SafeMath.sol");
const input = {
  sources: {
    "Leaderboard.sol": fs.readFileSync(leaderboardPath, "utf8"),
    "SafeMath.sol": fs.readFileSync(safeMathPath, "utf8")
  }
}

const output = solc.compile(input, 1);
console.log('o', output);
fs.ensureDirSync(buildPath);

for (let contract in output) {
  const filename = contract.split(".")[0];
  fs.outputJsonSync(
    path.resolve(buildPath, `${filename}.json`),
    output[contract]
  );
}

console.log('compile successful!');

В настоящее время это работает, но я бы хотел сделать следующее:

const safeMathPath = path.resolve(__dirname, "contracts", "math", "SafeMath.sol");

Как правильно объединить эти отдельные файлы, чтобы мне не нужно было помещать их все в одну папку?

...