首页 > 解决方案 > ParserError:预期的编译指示、导入指令或合同/接口/库定义

问题描述

"ParserError: Expected pragma, import directive or contract/interface/library definition"每次我使用compile.jswithnode compile.js命令编译我的solidity 文件时都会收到此错误Inbox.sol。这个错误我google了一下,有两种解决方法,一种是因为我的语法错误,比如 no ;,另一种是因为solidity编译器。我检查了我的solidity 版本和语法,我找不到任何错误。请帮忙!

我已经尝试过了,但这不是我的solidity版本,如果我将代码更改为contructor语法,它会弹出错误。

收件箱.sol

pragma solidity ^0.4.17;
contract Inbox{
  string public message;
  function Inbox(string initialMessage)public{
    message = initialMessage;
  }
  function setMessage(string newMessage) public{
    message = newMessage;
  }

}

编译.js

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

const inboxPath = path.resolve(__dirname, 'Contracts','Inbox.sol');
const source = fs.readFileSync(inboxPath,'utf8');

console.log(solc.compile(JSON.stringify({
    language: 'Solidity',
    sources: {
      'Inbox.sol': {
        content: source,
      },
    },
    settings: {
      outputSelection: {
        '*': {
          '*': ['evm', 'bytecode'],
        },
      },
    },
  })));

包.json

{
  "name": "error",
  "version": "1.0.0",
  "description": "",
  "main": "compile.js",
  "scripts": {
    "test": "mocha"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "solc": "^0.4.17"
  }
}

包-lock.json

"solc": {
      "version": "0.4.17",
      "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.17.tgz",
      "integrity": "sha512-39Tmo2r+qclwW7ooLXMLzMSxmoGtHy3/p2sDKdA9NM/+MRtzLm/AFKj4BY2Cocg3gwkfJzKTEx6X0wiI4fIZ/A==",
      "requires": {
        "fs-extra": "^0.30.0",
        "memorystream": "^0.3.1",
        "require-from-string": "^1.1.0",
        "semver": "^5.3.0",
        "yargs": "^4.7.1"
      }
  },

标签: javascriptcompiler-errorssolidity

解决方案


我把我的 compile.js 代码改成了这个

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

const inboxPath = path.resolve(__dirname, 'Contracts','Inbox.sol');
const source = fs.readFileSync(inboxPath,'utf8');

console.log(solc.compile(source,1));

然后它起作用了!!!


推荐阅读