运行testrpc报错/usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:74110 let results = {}

在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语法找到问题的办法.

猜你喜欢

转载自blog.csdn.net/gengli2017/article/details/80429078