在ubuntu16 32位上安装ethereumjs-testrpc后,输入testrpc报错
/usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:71649
function VM (opts = {}) {
^
SyntaxError: Unexpected token =
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:373:25)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
at startup (node.js:140:18)
at node.js:1043:3
分析后其原因是代码本身的一些问题, 修改代码后解决问题.根据提示,出错的文件是/usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js的第71649行, 打开并编辑文件,我用的是vim编辑器
sudo vim /usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js
找到71649行,vim在命令模式下输入
:71649
再回车即可.
修改代码
原来是
function VM (opts={}) {
this.stateManager = new StateManager({
trie: opts.state,
blockchain: opts.blockchain
})
修改为
function VM (opts) {
opts = opts || {}
this.stateManager = new StateManager({
trie: opts.state,
blockchain: opts.blockchain
})
源代码出错原因是js中函数默认值书写方式出错,我也很好奇这些源代码是不是没有测试过.
其他还报错
/usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:74110
let results = {}
^^^
SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:373:25)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
at startup (node.js:140:18)
at node.js:1043:3
分析出错原因是没有使用js(JavaScript)的strict模式,添加即可. 但不可以添加在文件开头,我试了那样会报错,原因是代码一部分是不能用strict模式的.于是在函数域内添加,具体操作如下
根据报错提示,打开文件,找到要修改的行,我的是/usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js的第74110行,
sudo vim /usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js
把
module.exports = function (opts) {
assert(opts.data)
改为
module.exports = function (opts) { "use strict";
assert(opts.data)
我改了三处这样的错误,改好之后之前的SyntaxError:都没了.其实遇到问题关键要根据提示分析一下原因,我之前也不了解JavaScript语法,也是根据错误提示上网查JavaScript语法找到问题的办法.