Heim >Web-Frontend >js-Tutorial >Detaillierte Erläuterung des VM-Moduls in NodeJs_node.js

Detaillierte Erläuterung des VM-Moduls in NodeJs_node.js

WBOY
WBOYOriginal
2016-05-16 16:00:512104Durchsuche

Was ist VM?

Das VM-Modul ist das Kernmodul in NodeJS und unterstützt die Anforderungsmethode und den Betriebsmechanismus von NodeJS. Manchmal verwenden wir auch VM-Vorlagen, um einige spezielle Aufgaben zu erledigen.

Über VM kann JS sofort kompiliert und ausgeführt oder kompiliert, gespeichert und später ausgeführt werden
Das VM-Modul enthält drei häufig verwendete Methoden zum Erstellen eines unabhängig laufenden Sandbox-Systems:
vm.runInThisContext(code, filename);

Diese Methode wird verwendet, um einen unabhängigen Sandbox-Laufbereich zu erstellen. Der Code innerhalb des Codes kann auf externe globale Objekte zugreifen, aber nicht auf andere Variablen

Und der Code wird intern und extern geteilt

Code kopieren Der Code lautet wie folgt:

var vm = require("vm");

var p = 5;
global.p = 11;

vm.runInThisContext("console.log('ok', p)");//Anzeige 11
unter global vm.runInThisContext("console.log(global)"); // Global anzeigen

console.log(p);// Anzeige 5
vm.runInContext(code, sandBox);

Diese Methode wird verwendet, um einen unabhängigen Sandbox-Laufbereich zu erstellen. SandBox wird als globale Variable an den Code übergeben, es gibt jedoch keine globale Variable

Die SandBox-Anforderung ist die SandBox, die von der vm.createContext()-Methode erstellt wurde

Code kopieren Der Code lautet wie folgt:

var vm = require("vm");
var util = require("util");

var window = {
p: 2,
vm: vm,
Konsole: Konsole,
​ erfordern: erfordern
};

var p = 5;

global.p = 11;

vm.createContext(window);
vm.runInContext('p = 3;console.log(typeof global);', window); // global ist undefiniert

console.log(window.p);// wird in 3
geändert
console.log(util.inspect(window));
vm.runInNewContext(code, sandbox, opt);

Diese Methode sollte mit runInContext identisch sein, jedoch ohne den Schritt zum Erstellen einer SandBox

Vergleichen

Komplexere Situationen
Was passiert, wenn runInThisContext in runInContext ausgeführt wird? Auf wessen globales Objekt greift runInThisContext zu?

Wie wird der folgende Code ausgeführt?

Code kopieren Der Code lautet wie folgt:

var vm = require("vm");
var util = require("util");

var window = {
S. 2,
vm: vm,
Konsole: Konsole,
​ erfordern: erfordern
};

window.global = window;

var p = 5;

global.p = 11;

vm.runInNewContext('p = 3;console.log(typeof global);require('vm').runInThisContext("console.log(p)");', window);

Der Code in runInThisContext kann auf externe globale Objekte zugreifen, aber es gibt tatsächlich kein globales Objekt außerhalb (obwohl es sich im Wesentlichen nicht um ein globales Objekt handelt).

Die Ausführungsergebnisse sind wie folgt

Code kopieren Der Code lautet wie folgt:
Objekt (global vorhanden)
11 (oberstes globales p)

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn