Objekt eingebautes Objekt

Objekt SandBox

Sicherheits-Sandbox-Objekt, das verwendet wird, um einen unabhängigen Betriebsbereich zu verwalten

Der gesamte Code wird in einer eigenen Sandbox ausgeführt, das globale require ruft die aktuelle Sandbox auf, um das Modul zu laden, und die Sandbox wird über require an die geladene Sandbox übergeben. Das folgende Beispiel erstellt eine Sandbox und schränkt den Zugriff auf das globale Basismodul einassert Modul und fügen Sie zwei benutzerdefinierte Module a und b hinzu:

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');

Erbe

#lineWidth: 1.5 #font: Helvetica,sans-Serif #fontSize: 10 #leading: 1.6 #.this: fill=lightgray #.class: fill=white [<class>object|toString();toJSON()] [<this>SandBox|new SandBox()|global;modules|add();addScript();remove();has();clone();freeze();refresh();run();resolve();require();setModuleCompiler()] [object] <:- [SandBox] SandBox new SandBox() global modules add() addScript() remove() has() clone() freeze() refresh() run() resolve() require() setModuleCompiler() object toString() toJSON()

Konstrukteur

SandBox

Konstruieren Sie ein neues Sicherheits-Sandbox-Objekt und initialisieren Sie das Basismodul

1
new SandBox(Object mods);

Aufrufparameter:

  • mods: Objekt, geben Sie das hinzuzufügende Modul-Objektverzeichnis an

Konstruieren Sie ein neues Sicherheits-Sandbox-Objekt und initialisieren Sie das Basismodul

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

Aufrufparameter:

  • mods: Objekt, geben Sie das hinzuzufügende Modul-Objektverzeichnis an
  • require: Funktion, benutzerdefinierte Anforderungsfunktion, wenn das Modul nicht vorhanden ist, rufen Sie zuerst die benutzerdefinierte Funktion auf und laden Sie sie dann aus der Datei, ohne zurückzukehren

Konstruieren Sie ein neues unabhängiges globales Sicherheits-Sandbox-Objekt und initialisieren Sie das Basismodul

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

Aufrufparameter:

  • mods: Objekt, geben Sie das hinzuzufügende Modul-Objektverzeichnis an
  • global: Objekt, geben Sie die initialisierte globale Eigenschaft an

Konstruieren Sie ein neues unabhängiges globales Sicherheits-Sandbox-Objekt und initialisieren Sie das Basismodul

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

Aufrufparameter:

  • mods: Objekt, geben Sie das hinzuzufügende Modul-Objektverzeichnis an
  • require: Funktion, benutzerdefinierte Anforderungsfunktion, wenn das Modul nicht vorhanden ist, rufen Sie zuerst die benutzerdefinierte Funktion auf und laden Sie sie dann aus der Datei, ohne zurückzukehren
  • global: Objekt, geben Sie die initialisierte globale Eigenschaft an

Mitgliedsattribute

global

Objekt, Abfrage-Sandbox global Objekt

1
readonly Object SandBox.global;

modules

Object, frage das Dictionary-Objekt aller vorhandenen Module in der Sandbox ab

1
readonly Object SandBox.modules;

Mitgliederfunktion

add

Fügen Sie der Sandbox ein Basismodul hinzu

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

Aufrufparameter:

  • id: String, geben Sie den Namen des hinzuzufügenden Moduls an, dieser Pfad hat nichts mit dem aktuell laufenden Skript zu tun, es muss ein absoluter Pfad oder Modulname sein
  • mod: Wert, geben Sie das hinzuzufügende Modulobjekt an

Fügen Sie der Sandbox eine Reihe von Basismodulen hinzu

1
SandBox.add(Object mods);

Aufrufparameter:

  • mods: Objekt, geben Sie das hinzuzufügende Modulobjektverzeichnis an. Das hinzugefügte Javascript-Modul erstellt eine Kopie, um die Störung von Sandbox-Modifikationsobjekten zu vermeiden

addScript

Fügen Sie der Sandbox ein Skriptmodul hinzu

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

Aufrufparameter:

  • srcname: String, geben Sie den Namen des hinzuzufügenden Skripts an, srcname muss die Erweiterung enthalten, wie zum Beispiel json Oder js, jsc
  • script: Buffer, Geben Sie den hinzuzufügenden Binärcode an

Ergebnis zurückgeben:

  • Value, Geladenes Modulobjekt zurückgeben

remove

Löschen Sie das angegebene Basismodul aus der Sandbox

1
SandBox.remove(String id);

Aufrufparameter:

  • id: String, geben Sie den Namen des zu löschenden Moduls an, dieser Pfad hat nichts mit dem aktuell laufenden Skript zu tun, es muss ein absoluter Pfad oder Modulname sein

has

Erkennen Sie die Existenz des Basismoduls aus der Sandbox

1
Boolean SandBox.has(String id);

Aufrufparameter:

  • id: String, geben Sie den Namen des zu erkennenden Moduls an, dieser Pfad hat nichts mit dem aktuell laufenden Skript zu tun, es muss ein absoluter Pfad oder Modulname sein

Ergebnis zurückgeben:

  • Boolean, existiert es

clone

Kopieren Sie die aktuelle Sandbox, die neue Sandbox enthält die Module der aktuellen Sandbox, mit gleichem Namen und Funktion erforderlich

1
SandBox SandBox.clone();

Ergebnis zurückgeben:

  • SandBox, Neue Sandbox kopiert

freeze

Friere die aktuelle Sandbox ein, die Sandbox nach dem Einfrieren, richtig global Vorgenommene Änderungen werden ignoriert

1
SandBox.freeze();

refresh

Laden Sie das Modul in der Sandbox neu, dieser Vorgang wird nur das Modul neu initialisieren, die Variablen im Modul zurücksetzen und den Modulcode nicht aktualisieren

1
SandBox.refresh();

run

Führen Sie ein Skript aus

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

Aufrufparameter:

  • fname: String, geben Sie den auszuführenden Skriptpfad an, dieser Pfad hat nichts mit dem aktuell laufenden Skript zu tun, es muss ein absoluter Pfad sein
  • argv: Array, geben Sie den auszuführenden Parameter an, dieser Parameter kann mit argv im Skript abgerufen werden

resolve

Abfrage eines Moduls und Rückgabe des vollständigen Dateinamens des Moduls

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

Aufrufparameter:

  • id: String, geben Sie den Namen des zu ladenden Moduls an
  • base: String, geben Sie den Suchpfad an

Ergebnis zurückgeben:

  • String, Den vollständigen Dateinamen des geladenen Moduls zurückgeben

require

Laden Sie ein Modul und geben Sie das Modulobjekt zurück

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

Aufrufparameter:

  • id: String, geben Sie den Namen des zu ladenden Moduls an
  • base: String, geben Sie den Suchpfad an

Ergebnis zurückgeben:

  • Value, Geladenes Modulobjekt zurückgeben

setModuleCompiler

Compiler zum angegebenen extname hinzufügen, extname darf nicht die systemintegrierte Erweiterung sein (einschließlich ('.js','.json','.jsc','.wasm'}), muss der Compiler ein gültiges Javascript-Skript zurückgeben.

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

Aufrufparameter:

  • extname: String, der angegebene extname, muss mit '.' beginnen und ist eine nicht im System integrierte Erweiterung
  • compiler: Funktion, kompiliere die Callback-Funktion, alle Dateien mit extname werden nur einmal benötigt Das Format der Callback-Funktion ist compiler(buf, requireInfo), buf ist die gelesene DateiBuffer, requireInfo-Struktur ist {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

Gibt die String-Darstellung des Objekts zurück, gibt im Allgemeinen "[Native Object]" zurück, das Objekt kann entsprechend seiner eigenen Eigenschaften neu implementiert werden

1
String SandBox.toString();

Ergebnis zurückgeben:

  • String, Gibt die String-Darstellung des Objekts zurück

toJSON

Gibt die Darstellung des Objekts im JSON-Format zurück, gibt im Allgemeinen eine Sammlung von lesbaren Attributen zurück, die durch das Objekt definiert sind

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

Aufrufparameter:

  • key: String, unbenutzt

Ergebnis zurückgeben:

  • Value, Gibt einen Wert zurück, der JSON serialisierbar enthält