Node(15) vm

vm is similar to eval(), but eval() can change the surrounding context, whereas vm cannot

vm is like creating a sandbox, the code will be executed in the different namespace instead of running in the current namespace.

var vm = require( 'vm' )
vm.runInThisContext( "1+1+1" )
//3

The difference:

var localVar = 123,
    usingscript, evaled,
    vm = require('vm');

usingscript = vm.runInThisContext('localVar = 1;',
  'myfile.vm');  //'myfile.vm' is only for generating appropriate error msg
console.log('localVar: ' + localVar + ', usingscript: ' +
  usingscript);
evaled = eval('localVar = 1;');
console.log('localVar: ' + localVar + ', evaled: ' +
  evaled);

// localVar: 123, usingscript: 1
// localVar: 1, evaled: 1

create and run in  context:

var vm = require( 'vm');
var context = { alphabet:""};
vm.runInNewContext( "alphabet += 'a'", context);
vm.runInNewContext( "alphabet += 'b'", context);

console.log( context );

Compiling code into a script with vm

example.js:
console.log( output )

var vm = require( 'vm' );
var fs = require( 'fs' );

var code = fs.readFileSync( 'example.js' );
console.log( code.toString());

var script = vm.createScript( code );
//script.runInNewContext( { output:"Kick Ass" });    undefined:1:1
script.runInNewContext( { "console":console, "output": "Kick Ass" });
output:

console.log( output )

Kick Ass




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值