Objekt eingebautes Objekt

Objekt SandBox

Sicherheits-Sandbox-Objekt, das zum Verwalten eines unabhängigen Laufbereichs verwendet wird

Der gesamte Code wird in einer eigenen Sandbox ausgeführt. Die globale Anforderung ruft das aktuelle Sandbox-Lademodul auf, und die Sandbox wird über require an die geladene Sandbox übergeben. Im folgenden Beispiel wird eine Sandbox erstellt, der Zugriff auf das assert Modul im globalen Basismodul eingeschränkt und zwei benutzerdefinierte Module a und b hinzugefügt:

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

Konstrukteur

SandBox

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

1
new SandBox(Object mods);

Parameter aufrufen:

  • mods : Object, gibt das hinzuzufügende Modulobjektwörterbuch an

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

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

Parameter aufrufen:

  • mods : Object, gibt das hinzuzufügende Modulobjektwörterbuch an
  • require : Function, custom require function. Wenn das Modul nicht vorhanden ist, rufen Sie zuerst die benutzerdefinierte Funktion auf und laden Sie sie dann aus der Datei, wenn keine Rückgabe erfolgt

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

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

Parameter aufrufen:

  • mods : Object, gibt das hinzuzufügende Modulobjektwörterbuch an
  • global : Objekt, geben Sie die initialisierte Global-Eigenschaft an

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

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

Parameter aufrufen:

  • mods : Object, gibt das hinzuzufügende Modulobjektwörterbuch an
  • require : Function, custom require function. Wenn das Modul nicht vorhanden ist, rufen Sie zuerst die benutzerdefinierte Funktion auf und laden Sie sie dann aus der Datei, wenn keine Rückgabe erfolgt
  • global : Objekt, geben Sie die initialisierte Global-Eigenschaft an

Mitgliedsattribut

global

Objekt, fragen Sie das global Objekt der Sandbox ab

1
readonly Object SandBox.global;

modules

Objekt, fragen Sie die Wörterbuchobjekte aller in der Sandbox vorhandenen Module ab

1
readonly Object SandBox.modules;

Mitgliedsfunktion

add

Fügen Sie der Sandbox ein Basismodul hinzu

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

Parameter aufrufen:

  • id : String, geben Sie den Namen des Moduls an, das hinzugefügt werden soll. Dieser Pfad hat nichts mit dem aktuell ausgeführten Skript zu tun. Er muss ein absoluter Pfad oder Modulname sein
  • mod : Wert, geben Sie das hinzuzufügende Modulobjekt an

Fügen Sie der Sandbox eine Reihe grundlegender Module hinzu

1
SandBox.add(Object mods);

Parameter aufrufen:

  • mods : Objekt, geben Sie das hinzuzufügende Modulobjektwörterbuch an. Das hinzugefügte Javascript-Modul generiert eine Kopie, um gegenseitige Interferenzen durch Sandbox-Änderungsobjekte zu vermeiden

addScript

Fügen Sie der Sandbox ein Skriptmodul hinzu

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

Parameter aufrufen:

  • srcname : String, geben Sie den Namen des Skripts an, das hinzugefügt werden soll. srcname muss die Erweiterung enthalten, z. B. json oder js, jsc
  • script : Buffer , geben Sie den hinzuzufügenden Binärcode an

Ergebnis zurückgeben:

  • Value , gibt das geladene Modulobjekt zurück

remove

Löschen Sie das angegebene Basismodul aus der Sandbox

1
SandBox.remove(String id);

Parameter aufrufen:

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

has

Überprüfen Sie, ob das Basismodul in der Sandbox vorhanden ist

1
Boolean SandBox.has(String id);

Parameter aufrufen:

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

Ergebnis zurückgeben:

  • Boolean , ob es existiert

clone

Kopieren Sie die aktuelle Sandbox, die neue Sandbox enthält das aktuelle Sandbox-Modul sowie den gleichen Namen und die erforderliche Funktion

1
SandBox SandBox.clone();

Ergebnis zurückgeben:

  • SandBox , die neue Sandbox kopiert

freeze

Frieren Sie die aktuelle Sandbox ein, die eingefrorene Sandbox. Änderungen an global werden ignoriert

1
SandBox.freeze();

refresh

Laden Sie das Modul erneut in die Sandbox. Durch diesen Vorgang wird nur das Modul neu initialisiert, die Variablen im Modul zurückgesetzt und der Modulcode nicht aktualisiert

1
SandBox.refresh();

run

Führen Sie ein Skript aus

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

Parameter aufrufen:

  • fname : String, geben Sie den Pfad des auszuführenden Skripts an. Dieser Pfad hat nichts mit dem aktuell ausgeführten Skript zu tun. Er muss ein absoluter Pfad sein
  • argv : Array, geben Sie den auszuführenden Parameter an. Dieser Parameter kann mit argv im Skript abgerufen werden

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

Parameter aufrufen:

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

Ergebnis zurückgeben:

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

require

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

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

Parameter aufrufen:

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

Ergebnis zurückgeben:

  • Value , gibt das geladene Modulobjekt zurück

setModuleCompiler

In Compiler an die angegebenen EXTNAME. EXTNAME nicht das System der eingebauten sein kann Erweiterung (einschließlich (‘js, ' json ', 'jsc', 'wasm')), der Compiler braucht einen gültigen JavaScript - Skript zurückzukehren.

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

Parameter aufrufen:

  • extname : String, der angegebene extname muss mit '.' beginnen und ist eine nicht systemintegrierte Erweiterung
  • compiler : Funktion, Rückruffunktion kompilieren, alle Dateien mit extname werden nur einmal benötigt. Das Format dieser Rückruffunktion ist compiler(buf, requireInfo) , buf ist der Buffer gelesene Dateien und die Struktur von requireInfo 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 Zeichenfolgendarstellung des Objekts zurück, gibt im Allgemeinen "[Native Object]" zurück. Das Objekt kann gemäß seinen eigenen Merkmalen erneut implementiert werden

1
String SandBox.toString();

Ergebnis zurückgeben:

  • String , gibt eine String-Darstellung des Objekts zurück

toJSON

Gibt die JSON-Darstellung des Objekts zurück und gibt im Allgemeinen eine Sammlung lesbarer Attribute zurück, die vom Objekt definiert wurden

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

Parameter aufrufen:

  • key : String, unbenutzt

Ergebnis zurückgeben:

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