Maison > interface Web > js tutoriel > Explication détaillée du module VM dans NodeJs_node.js

Explication détaillée du module VM dans NodeJs_node.js

WBOY
Libérer: 2016-05-16 16:00:51
original
2120 Les gens l'ont consulté

Qu'est-ce que la VM ?

Le module VM est le module principal de NodeJS, prenant en charge la méthode require et le mécanisme de fonctionnement de NodeJS. Parfois, nous pouvons également utiliser des modèles de VM pour effectuer certaines choses spéciales.

Grâce à la VM, JS peut être compilé et exécuté immédiatement ou compilé, enregistré et exécuté plus tard
. Le module VM contient trois méthodes couramment utilisées pour créer un système sandbox fonctionnant de manière indépendante, comme suit :
vm.runInThisContext(code, nom de fichier);

Cette méthode est utilisée pour créer un espace d'exécution sandbox indépendant. Le code dans le code peut accéder aux objets globaux externes, mais ne peut pas accéder à d'autres variables

Et le code est partagé en interne et en externe

Copier le code Le code est le suivant :

var vm = require("vm");

var p = 5;
global.p = 11;

vm.runInThisContext("console.log('ok', p)");//Affichage 11
sous global vm.runInThisContext("console.log(global)"); // Affichage global

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

Cette méthode est utilisée pour créer un espace d'exécution sandbox indépendant. sandBox sera transmis en tant que variable globale dans le code, mais il n'y a pas de variable globale

L'exigence sandBox est la sandBox créée par la méthode vm.createContext()

Copier le code Le code est le suivant :

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

var fenêtre = {
p : 2,
machine virtuelle : machine virtuelle,
console : console,
​ exiger : exiger
};

var p = 5;

global.p = 11;

vm.createContext(window);
vm.runInContext('p = 3;console.log(typeof global);', window); // global n'est pas défini

console.log(window.p);// est remplacé par 3

console.log(util.inspect(window));
vm.runInNewContext(code, sandbox, opt);

Cette méthode doit être la même que runInContext, mais sans l'étape de création de sandBox

Comparer

Situations plus complexes
Que se passera-t-il si runInThisContext est exécuté dans runInContext ? À qui runInThisContext accède-t-il à l'objet global ?

Comment le code suivant sera-t-il exécuté ?

Copier le code Le code est le suivant :

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

var fenêtre = {
p : 2,
machine virtuelle : machine virtuelle,
console : console,
​ exiger : exiger
};

window.global = fenêtre;

var p = 5;

global.p = 11;

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

Le code à l'intérieur de runInThisContext peut accéder aux objets globaux externes, mais il n'y a en fait aucun objet global à l'extérieur (bien qu'il y en ait, ce n'est pas essentiellement un objet global). Rappelez-vous simplement que runInThisContext ne peut accéder qu'à l'objet global supérieur

.

Les résultats d'exécution sont les suivants

Copier le code Le code est le suivant :

objet (global existe)
11 (meilleur p mondial)
Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal