ObjectSandBox
Geïsoleerd sandbox-object, gebruikt om een onafhankelijke loopruimte te beheren
Alle code wordt in zijn eigen sandbox uitgevoerd. De globale require roept de huidige sandbox aan om de module te laden, en de sandbox wordt via require doorgegeven aan de geladen sandbox. In het volgende voorbeeld wordt een sandbox gemaakt die de toegang beperkt tot alleen globale basismodules.assertmodule en voeg twee aangepaste modules a en b toe:
1
2
3
4
5
6
7
8var vm = require('vm');
var sbox = new vm.SandBox({
a: 100,
b: 200,
assert: require('assert')
});
var mod_in_sbox = sbox.require('./path/to/mod');
Opgemerkt moet worden dat SandBox geen aanvalsbestendige beveiligingssandbox is. SandBox is slechts een onafhankelijke loopruimte die kan worden gebruikt om verschillende codes te isoleren en wederzijdse interferentie te voorkomen, maar kan kwaadaardige code niet voorkomen.
erfenis relatie
Constructeur
SandBox
Construeer een nieuw isolatie-sandbox-object en initialiseer de basismodule
1new SandBox(Object mods = {});
Oproepparameters:
- mods: Object, specificeert de moduleobjectwoordenlijst die moet worden toegevoegd
Construeer een nieuw isolatie-sandbox-object en initialiseer de basismodule
1
2new SandBox(Object mods,
Function require);
Oproepparameters:
- mods: Object, specificeert de moduleobjectwoordenlijst die moet worden toegevoegd
- require: Functie, een aangepaste functie voor vereisen. Als de module niet bestaat, wordt eerst de aangepaste functie aangeroepen, zonder return, en vervolgens uit het bestand geladen.
Construeer een nieuw, onafhankelijk Global isolation sandbox-object en initialiseer de basismodule
1
2new SandBox(Object mods,
Object global);
Oproepparameters:
- mods: Object, specificeert de moduleobjectwoordenlijst die moet worden toegevoegd
- global: Object, specificeert de geïnitialiseerde eigenschap Global
Construeer een nieuw, onafhankelijk Global isolation sandbox-object en initialiseer de basismodule
1
2
3new SandBox(Object mods,
Function require,
Object global);
Oproepparameters:
- mods: Object, specificeert de moduleobjectwoordenlijst die moet worden toegevoegd
- require: Functie, een aangepaste functie voor vereisen. Als de module niet bestaat, wordt eerst de aangepaste functie aangeroepen, zonder return, en vervolgens uit het bestand geladen.
- global: Object, specificeert de geïnitialiseerde eigenschap Global
eigenschappen van leden
global
Object, query-sandboxglobalvoorwerp
1readonly Object SandBox.global;
modules
Object: zoek naar het woordenboekobject van alle bestaande modules in de sandbox
1readonly Object SandBox.modules;
lid functie
addBuiltinModules
Voeg ingebouwde basismodules toe aan de sandbox
1SandBox.addBuiltinModules();
add
Voeg een basismodule toe aan de sandbox
1
2SandBox.add(String id,
Value mod);
Oproepparameters:
- id: String, specificeert de naam van de module die moet worden toegevoegd. Dit pad heeft niets te maken met het momenteel actieve script. Het moet een absoluut pad of modulenaam zijn.
- mod: Waarde, specificeert het moduleobject dat moet worden toegevoegd
Voeg een set basismodules toe aan de sandbox
1SandBox.add(Object mods);
Oproepparameters:
- mods: Object, specificeert de module-objectwoordenlijst die moet worden toegevoegd. De toegevoegde JavaScript-module genereert een kopie om wederzijdse interferentie tussen sandbox-modificatieobjecten te voorkomen.
addScript
Voeg een scriptmodule toe aan de sandbox
1
2Value SandBox.addScript(String srcname,
Buffer script);
Oproepparameters:
- srcname: String, specificeert de naam van het script dat moet worden toegevoegd, srcname moet de extensie bevatten, zoalsjsonOf js, jsc
- script:Buffer, specificeert de binaire code die moet worden toegevoegd
Resultaten retourneren:
- Value, retourneert het geladen moduleobject
remove
Verwijdert de opgegeven basismodule uit de sandbox
1SandBox.remove(String id);
Oproepparameters:
- id: String, specificeert de naam van de module die moet worden verwijderd. Dit pad heeft niets te maken met het momenteel actieve script. Het moet een absoluut pad of modulenaam zijn.
has
Detecteer of de basismodule uit de sandbox bestaat
1Boolean SandBox.has(String id);
Oproepparameters:
- id: String, specificeert de naam van de module die moet worden gedetecteerd. Dit pad heeft niets te maken met het momenteel actieve script. Het moet een absoluut pad of modulenaam zijn.
Resultaten retourneren:
- Boolean, bestaat het
clone
Kopieer de huidige sandbox. De nieuwe sandbox bevat de modules van de huidige sandbox met dezelfde naam en waarvoor functionaliteit vereist is.
1SandBox SandBox.clone();
Resultaten retourneren:
- SandBox, nieuwe sandbox gekopieerd
freeze
Bevries de huidige sandbox en de bevroren sandbox.globalAangebrachte wijzigingen worden genegeerd
1SandBox.freeze();
run
voer een script uit
1SandBox.run(String fname);
Oproepparameters:
- fname: String, specificeert het pad van het script dat moet worden uitgevoerd. Dit pad heeft niets te maken met het momenteel actieve script en moet een absoluut pad zijn.
resolve
Voer een query uit op een module en retourneer de volledige bestandsnaam van de module
1
2String SandBox.resolve(String id,
String base);
Oproepparameters:
- id: String, specificeert de naam van de module die moet worden geladen
- base: String, geef het zoekpad op
Resultaten retourneren:
- String, retourneert de volledige bestandsnaam van de geladen module
require
Laadt een module en retourneert het moduleobject
1
2Value SandBox.require(String id,
String base);
Oproepparameters:
- id: String, specificeert de naam van de module die moet worden geladen
- base: String, geef het zoekpad op
Resultaten retourneren:
- Value, retourneert het geladen moduleobject
setModuleCompiler
Voeg een compiler toe aan de opgegeven extnaam. De extnaam mag geen ingebouwde systeemextensie zijn (inclusief {'.js', '.json', '.jsc', '.wasm'}), moet de compiler een geldig javascript-script retourneren.
1
2SandBox.setModuleCompiler(String extname,
Function compiler);
Oproepparameters:
- extname: String, de opgegeven extnaam moet beginnen met '.' en is een niet door het systeem ingebouwde extensie.
- compiler: Functie, compilatie-callback-functie, alle bestanden met extname hebben slechts één keer nodig. Het formaat van de callback-functie is
compiler(buf, requireInfo)
, buf is het leesbestandBuffer, de requireInfo-structuur is{filename: string}
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22var 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
Retourneert de tekenreeksweergave van het object. Over het algemeen wordt '[Native Object]' geretourneerd. Het object kan opnieuw worden geïmplementeerd op basis van zijn eigen kenmerken.
1String SandBox.toString();
Resultaten retourneren:
- String, retourneert de tekenreeksrepresentatie van het object
toJSON
Retourneert een weergave in JSON-indeling van het object, waarbij doorgaans een verzameling leesbare eigenschappen wordt geretourneerd die door het object zijn gedefinieerd.
1Value SandBox.toJSON(String key = "");
Oproepparameters:
- key: Tekenreeks, niet gebruikt
Resultaten retourneren:
- Value, retourneert een waarde die JSON-serialiseerbaar bevat