NodeJs的虚拟机模块的详细解决方案
什么是虚拟机虚拟机模块是NodeJS的核心模块,支持运行机制需要方法和Nodejs。有时我们可能还需要使用VM模板来做一些特殊的事情。
通过VM,js可以立即执行、编译或保存,然后再执行(Javascript代码可以立即编译或运行)。
VM模块包含三种常用的方法,用于创建独立运行的沙箱系统,这是以下三种方法
Vm.runInThisContext(代码,文件名);
此方法用于创建独立的沙箱运行空间,代码内的代码可以访问外部全局对象,但不能访问其他变量。
代码内部全局和外部共享
复制代码代码如下所示:
var(=VM);
var = 5;
全局,p=11;
Vm.runInThisContext(console.log(好吧,P) / /显示);在全球11
Vm.runInThisContext(console.log(全球)); / /全球
console.log(P); / / 5
Vm.runInContext(代码,沙箱);
此方法用于创建独立的沙箱运行空间,沙箱将用作全局变量到代码中,但没有全局变量。
沙箱的要求是由vm.createcontext创建沙箱()方法
复制代码代码如下所示:
var(=VM);
VaR工具=需要(工具);
var窗口{ {
p:2,
虚拟机,
控制台:控制台,
要求:要求
};
var = 5;
全局,p=11;
Vm.createContext(窗口);
Vm.runInContext(P = 3;console.log(typeof全球);窗口); / /全球未定义
console.log(窗口。P); / /已改为3
console.log(util.inspect(窗口));
Vm.runInNewContext(代码,沙箱,OPT);
这种方法应该是runincontext相同,但有较少的步骤创建沙箱
比较
更复杂的情况
这runinthiscontext访问如果runinthiscontext要执行runincontext全局对象是谁
下面的代码将如何执行
复制代码代码如下所示:
var(=VM);
VaR工具=需要(工具);
var窗口{ {
p:2,
虚拟机,
控制台:控制台,
要求:要求
};
window.global =窗口;
var = 5;
全局,p=11;
Vm.runInNewContext(P = 3;console.log(typeof(全球);需要'vm )。RunInThisContext(console.log(P));,窗口);
在runinthiscontext代码可以访问外部全局对象,但其实是没有全局对象之外(虽然有,但本质不是全局对象)。我们只要记住一件事,runinthiscontext只能访问全球顶级对象,好。
执行的结果如下
复制代码代码如下所示:
对象(全局存在)
11(P在全球最高)