ParserError: Expected pragma, import directive or contract/interface/library definition
ParserError: Expected pragma, import directive or contract/interface/library definition
每次我使用 compile.js
和 node 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));
然后就成功了!!!
每次我使用 compile.js
和 node 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));
然后就成功了!!!