Objekt integriertes Objekt

ObjectSandBox

Isoliertes Sandbox-Objekt, das zur Verwaltung eines unabhängigen Laufbereichs verwendet wird

Der gesamte Code wird in einer eigenen Sandbox ausgeführt. Die globale Anforderung ruft die aktuelle Sandbox auf, um das Modul zu laden, und die Sandbox wird über die Anforderung an die geladene Sandbox übergeben. Im folgenden Beispiel wird eine Sandbox erstellt, die den Zugriff nur auf globale Basismodule beschränkt.assertModul 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');

Es ist zu beachten, dass es sich bei SandBox nicht um eine angriffssichere Sicherheitssandbox handelt. SandBox ist lediglich ein unabhängiger laufender Bereich, der zur Isolierung verschiedener Codes und zur Vermeidung gegenseitiger Beeinträchtigungen verwendet werden kann, jedoch keinen schädlichen Code verhindern kann.

Erbschaftsverhältnis

Konstrukteur

SandBox

Erstellen Sie ein neues Isolations-Sandbox-Objekt und initialisieren Sie das Basismodul

1
new SandBox(Object mods = {});

Aufrufparameter:

  • mods: Objekt, gibt das hinzuzufügende Modulobjektverzeichnis an

Erstellen Sie ein neues Isolations-Sandbox-Objekt und initialisieren Sie das Basismodul

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

Aufrufparameter:

  • mods: Objekt, gibt das hinzuzufügende Modulobjektverzeichnis an
  • require: Funktion, eine benutzerdefinierte Anforderungsfunktion. Wenn das Modul nicht vorhanden ist, wird die benutzerdefinierte Funktion zuerst ohne Rückgabe aufgerufen und dann aus der Datei geladen.

Erstellen Sie ein neues unabhängiges globales Isolations-Sandbox-Objekt und initialisieren Sie das Basismodul

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

Aufrufparameter:

  • mods: Objekt, gibt das hinzuzufügende Modulobjektverzeichnis an
  • global: Objekt, gibt die initialisierte globale Eigenschaft an

Erstellen Sie ein neues unabhängiges globales Isolations-Sandbox-Objekt und initialisieren Sie das Basismodul

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

Aufrufparameter:

  • mods: Objekt, gibt das hinzuzufügende Modulobjektverzeichnis an
  • require: Funktion, eine benutzerdefinierte Anforderungsfunktion. Wenn das Modul nicht vorhanden ist, wird die benutzerdefinierte Funktion zuerst ohne Rückgabe aufgerufen und dann aus der Datei geladen.
  • global: Objekt, gibt die initialisierte globale Eigenschaft an

Mitgliedereigenschaften

global

Objekt, Abfrage-SandboxglobalObjekt

1
readonly Object SandBox.global;

modules

Objekt: Fragen Sie das Wörterbuchobjekt aller vorhandenen Module in der Sandbox ab

1
readonly Object SandBox.modules;

Mitgliedsfunktion

addBuiltinModules

Fügen Sie der Sandbox integrierte Basismodule hinzu

1
SandBox.addBuiltinModules();

add

Fügen Sie der Sandbox ein Basismodul hinzu

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

Aufrufparameter:

  • id: String, gibt den Namen des hinzuzufügenden Moduls an. Dieser Pfad hat nichts mit dem aktuell ausgeführten Skript zu tun. Es muss ein absoluter Pfad oder Modulname sein.
  • mod: Wert, gibt das hinzuzufügende Modulobjekt an

Fügen Sie der Sandbox eine Reihe von Basismodulen hinzu

1
SandBox.add(Object mods);

Aufrufparameter:

  • mods: Objekt, gibt das hinzuzufügende Modulobjektwörterbuch an. Das hinzugefügte Javascript-Modul generiert eine Kopie, um gegenseitige Störungen zwischen Sandbox-Änderungsobjekten zu vermeiden.

addScript

Fügen Sie der Sandbox ein Skriptmodul hinzu

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

Aufrufparameter:

  • srcname: String, gibt den Namen des hinzuzufügenden Skripts an, srcname muss die Erweiterung enthalten, zjsonOder js, jsc
  • script:Buffer, gibt den hinzuzufügenden Binärcode an

Rückgabeergebnisse:

  • Value, gibt das geladene Modulobjekt zurück

remove

Entfernt das angegebene Basismodul aus der Sandbox

1
SandBox.remove(String id);

Aufrufparameter:

  • id: String, gibt den Namen des zu löschenden Moduls an. Dieser Pfad hat nichts mit dem aktuell ausgeführten Skript zu tun. Es muss ein absoluter Pfad oder Modulname sein.

has

Erkennen Sie, ob das Basismodul in der Sandbox vorhanden ist

1
Boolean SandBox.has(String id);

Aufrufparameter:

  • id: String, gibt den Namen des zu erkennenden Moduls an. Dieser Pfad hat nichts mit dem aktuell ausgeführten Skript zu tun. Es muss ein absoluter Pfad oder Modulname sein.

Rückgabeergebnisse:

  • Boolean, existiert es

clone

Kopieren Sie die aktuelle Sandbox. Die neue Sandbox enthält die Module der aktuellen Sandbox mit demselben Namen und derselben erforderlichen Funktion.

1
SandBox SandBox.clone();

Rückgabeergebnisse:

  • SandBox, neue Sandbox kopiert

freeze

Frieren Sie die aktuelle Sandbox und die eingefrorene Sandbox ein.globalVorgenommene Änderungen werden ignoriert

1
SandBox.freeze();

run

Führen Sie ein Skript aus

1
SandBox.run(String fname);

Aufrufparameter:

  • fname: String, gibt den Pfad des auszuführenden Skripts an. Dieser Pfad hat nichts mit dem aktuell ausgeführten Skript zu tun und muss ein absoluter Pfad sein.

resolve

Fragen Sie ein Modul ab und geben Sie den vollständigen Dateinamen des Moduls zurück

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

Aufrufparameter:

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

Rückgabeergebnisse:

  • String, gibt den vollständigen Dateinamen des geladenen Moduls zurück

require

Lädt ein Modul und gibt das Modulobjekt zurück

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

Aufrufparameter:

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

Rückgabeergebnisse:

  • Value, gibt das geladene Modulobjekt zurück

setModuleCompiler

Fügen Sie dem angegebenen Ext-Namen einen Compiler hinzu. Der Ext-Name darf keine im System integrierte 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: Zeichenfolge, der angegebene Extname muss mit „.“ beginnen und ist eine nicht im System integrierte Erweiterung.
  • compiler: Funktion, Kompilierungsrückruffunktion, alle Dateien mit extname werden nur einmal benötigt. Das Format der Rückruffunktion ist compiler(buf, requireInfo), buf ist die gelesene DateiBuffer, die 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({}); // compile ts to js and load sbox.setModuleCompiler('.ts', tsCompiler); var mod_ts = sbox.require('./a.ts'); // compile coffee to js and load sbox.setModuleCompiler('.coffee', cafeCompiler); var mod_coffee = sbox.require('./a.coffee'); // compile jsx to js and load sbox.setModuleCompiler('.jsx', reactCompiler); var mod_react = sbox.require('./a.jsx'); // compile yaml to rest and load sbox.setModuleCompiler('.yml', yaml2Rest) sbox.setModuleCompiler('.yaml', yaml2Rest) // compile markdown to html and load sbox.setModuleCompiler('.md', mdCompiler) sbox.setModuleCompiler('.markdown', mdCompiler)

toString

Gibt die Zeichenfolgendarstellung des Objekts zurück. Im Allgemeinen wird „[Native Object]“ zurückgegeben. Das Objekt kann gemäß seinen eigenen Eigenschaften neu implementiert werden.

1
String SandBox.toString();

Rückgabeergebnisse:

  • String, gibt die Zeichenfolgendarstellung des Objekts zurück

toJSON

Gibt eine Darstellung des Objekts im JSON-Format zurück und gibt im Allgemeinen eine Sammlung lesbarer Eigenschaften zurück, die vom Objekt definiert werden.

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

Aufrufparameter:

  • key: Zeichenfolge, nicht verwendet

Rückgabeergebnisse:

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