Objet objet intégré

Objet SandBox

Objet sandbox de sécurité, utilisé pour gérer un espace d'exploitation indépendant

Tout le code s'exécute dans son propre sandbox, le global require appellera le sandbox actuel pour charger le module et le sandbox sera transmis au sandbox chargé via require. L'exemple suivant crée un bac à sable, restreint l'accès uniquement au module d' assert dans le module de base global et ajoute deux modules personnalisés, a et b:

1 2 3 4 5 6 7 8
var vm = require('vm'); var sbox = new vm.SandBox({ a: 100, b: 200, assert: require('assert') }); var mod_in_sbox = sbox.require('./path/to/mod');

Héritage

Constructeur

SandBox

Construire un nouvel objet sandbox de sécurité et initialiser le module de base

1
new SandBox(Object mods);

Paramètres d'appel:

  • mods : Object, spécifiez le dictionnaire d'objets du module à ajouter

Construire un nouvel objet sandbox de sécurité et initialiser le module de base

1 2
new SandBox(Object mods, Function require);

Paramètres d'appel:

  • mods : Object, spécifiez le dictionnaire d'objets du module à ajouter
  • require : Function, custom require function, lorsque le module n'existe pas, appelez d'abord la fonction personnalisée, puis chargez à partir du fichier sans retourner

Construire un nouvel objet sandbox de sécurité global indépendant et initialiser le module de base

1 2
new SandBox(Object mods, Object global);

Paramètres d'appel:

  • mods : Object, spécifiez le dictionnaire d'objets du module à ajouter
  • global : Object, spécifiez la propriété Global initialisée

Construire un nouvel objet sandbox de sécurité global indépendant et initialiser le module de base

1 2 3
new SandBox(Object mods, Function require, Object global);

Paramètres d'appel:

  • mods : Object, spécifiez le dictionnaire d'objets du module à ajouter
  • require : Function, custom require function, lorsque le module n'existe pas, appelez d'abord la fonction personnalisée, puis chargez à partir du fichier sans retourner
  • global : Object, spécifiez la propriété Global initialisée

Attributs des membres

global

Object, interrogez l'objet global du sandbox

1
readonly Object SandBox.global;

modules

Objet, interrogez l'objet dictionnaire de tous les modules existants dans le bac à sable

1
readonly Object SandBox.modules;

Fonction membre

add

Ajouter un module de base au bac à sable

1 2
SandBox.add(String id, Value mod);

Paramètres d'appel:

  • id : String, spécifiez le nom du module à ajouter, ce chemin n'a rien à voir avec le script en cours d'exécution, il doit être un chemin absolu ou un nom de module
  • mod : Valeur, spécifiez l'objet module à ajouter

Ajouter un ensemble de modules de base au bac à sable

1
SandBox.add(Object mods);

Paramètres d'appel:

  • mods : Object, spécifiez le dictionnaire d'objets du module à ajouter, le module javascript ajouté générera une copie pour éviter les interférences entre les objets de modification du sandbox

addScript

Ajouter un module de script au bac à sable

1 2
Value SandBox.addScript(String srcname, Buffer script);

Paramètres d'appel:

  • srcname : String, spécifiez le nom du script à ajouter, srcname doit inclure l'extension, telle que json ou js, jsc
  • script : Buffer , spécifiez le code binaire à ajouter

Résultat de retour:

  • Value , renvoie l'objet module chargé

remove

Supprimer le module de base spécifié du bac à sable

1
SandBox.remove(String id);

Paramètres d'appel:

  • id : String, spécifiez le nom du module à supprimer, ce chemin n'a rien à voir avec le script en cours d'exécution, il doit s'agir d'un chemin absolu ou d'un nom de module

has

Vérifiez si le module de base existe depuis le bac à sable

1
Boolean SandBox.has(String id);

Paramètres d'appel:

  • id : String, spécifiez le nom du module à détecter, ce chemin n'a rien à voir avec le script en cours d'exécution, il doit s'agir d'un chemin absolu ou d'un nom de module

Résultat de retour:

  • Boolean , s'il existe

clone

Copiez le sandbox actuel, le nouveau sandbox contient les modules du sandbox actuel, avec le même nom et nécessitent la fonction

1
SandBox SandBox.clone();

Résultat de retour:

  • SandBox , le nouveau sandbox copié

freeze

Figer le bac à sable actuel, après avoir gelé le bac à sable, les modifications apportées à global seront ignorées

1
SandBox.freeze();

refresh

Rechargez le module dans le bac à sable, cette opération réinitialisera uniquement le module, réinitialisera les variables dans le module et ne mettra pas à jour le code du module

1
SandBox.refresh();

run

Exécuter un script

1 2
SandBox.run(String fname, Array argv = []);

Paramètres d'appel:

  • fname : String, spécifiez le chemin du script à exécuter, ce chemin n'a rien à voir avec le script en cours d'exécution, il doit être un chemin absolu
  • argv : Array, spécifiez le paramètre à exécuter, ce paramètre peut être obtenu en utilisant argv dans le script

resolve

Interroger un module et renvoyer le nom de fichier complet du module

1 2
String SandBox.resolve(String id, String base);

Paramètres d'appel:

  • id : String, spécifiez le nom du module à charger
  • base : String, spécifiez le chemin de recherche

Résultat de retour:

  • String , renvoie le nom de fichier complet du module chargé

require

Charger un module et renvoyer l'objet module

1 2
Value SandBox.require(String id, String base);

Paramètres d'appel:

  • id : String, spécifiez le nom du module à charger
  • base : String, spécifiez le chemin de recherche

Résultat de retour:

  • Value , renvoie l'objet module chargé

setModuleCompiler

Ajoutez le compilateur au nom ext spécifié, extname ne peut pas être l'extension intégrée au système (y compris ('.js', '. json ', '. Jsc', '. Wasm')), le compilateur doit renvoyer un script javascript valide.

1 2
SandBox.setModuleCompiler(String extname, Function compiler);

Paramètres d'appel:

  • extname : Chaîne, le nom ext spécifié doit commencer par '.' et est une extension intégrée non système
  • compiler : Fonction, fonction de rappel de compilation, tous les fichiers avec nom ext ne nécessitent qu'une seule fois. Le format de la fonction de rappel est compiler(buf, requireInfo) , buf est le fichier de lecture Buffer et la structure requireInfo est {filename: string} .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
var vm = require('vm'); var sbox = new vm.SandBox({}); // 编译 typescript 脚本为 js 并加载 sbox.setModuleCompiler('.ts', tsCompiler); var mod_ts = sbox.require('./a.ts'); // 编译 coffee 脚本为 js 并加载 sbox.setModuleCompiler('.coffee', cafeCompiler); var mod_coffee = sbox.require('./a.coffee'); // 编译 jsx 脚本为 js 并加载 sbox.setModuleCompiler('.jsx', reactCompiler); var mod_react = sbox.require('./a.jsx'); // 编译 yml 脚本为自定义的内容(如 API 集合) 并加载 sbox.setModuleCompiler('.yml', yaml2Rest) sbox.setModuleCompiler('.yaml', yaml2Rest) // 编译 markdown 为自定义的内容(如 html 字符串或 XmlDocument 对象) 并加载 sbox.setModuleCompiler('.md', mdCompiler) sbox.setModuleCompiler('.markdown', mdCompiler)

toString

Renvoie la représentation sous forme de chaîne de l'objet, renvoie généralement "[Native Object]", l'objet peut être réimplémenté selon ses propres caractéristiques

1
String SandBox.toString();

Résultat de retour:

  • String , renvoie la représentation sous forme de chaîne de l'objet

toJSON

Renvoie la représentation au format JSON de l'objet, renvoie généralement une collection d'attributs lisibles définis par l'objet

1
Value SandBox.toJSON(String key = "");

Paramètres d'appel:

  • key : chaîne, inutilisée

Résultat de retour:

  • Value , renvoie une valeur contenant JSON sérialisable