ParserError: Expected pragma, import directive or contract/interface/library definition

ParserError: Expected pragma, import directive or contract/interface/library definition

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

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

Inbox.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;
  }

}

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(JSON.stringify({
    language: 'Solidity',
    sources: {
      'Inbox.sol': {
        content: source,
      },
    },
    settings: {
      outputSelection: {
        '*': {
          '*': ['evm', 'bytecode'],
        },
      },
    },
  })));

package.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"
      }
  },

我把我的 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));

然后就成功了!!!