我一直在寻找一种在Node JS中做一些简单脚本的方法,并发现了VM module。文档指定run *方法返回执行结果,所以我想“嘿,为什么不直接返回一个对象,然后在我的主脚本中调用它的属性?”
所以我启动了一个Node REPL:
$ node
> var vm = require('vm');
undefined
> vm.runInNewContext("{ foo: 'bar' }")
'bar'
> vm.runInNewContext("{ foo: 'bar', baz: 'qux' }")
evalmachine.<anonymous>:1
{ foo: 'bar', baz: 'qux' }
^
SyntaxError: Unexpected token :
>
不完全是预期的结果。有趣的是,如果我返回作业的结果......
> vm.runInNewContext("exports = { foo: 'bar', baz: 'qux' }")
{ foo: 'bar', baz: 'qux' }
有人可以向我解释这种行为吗?
答案 0 :(得分:1)
v8将大括号解释为包含标签的代码块。用括号括起来:vm.runInNewContext("({foo: 'bar', baz: 'qux'})")
。