Oggetto SandBox
Oggetto sandbox di sicurezza, utilizzato per gestire uno spazio operativo indipendente
Tutto il codice viene eseguito nella propria sandbox, il require globale chiamerà la sandbox corrente per caricare il modulo e la sandbox verrà passata alla sandbox caricata tramite require. L'esempio seguente crea una sandbox e limita l'accesso al modulo base globaleassert Modulo e aggiungi due moduli personalizzati, a e b:
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');
Eredità
Costruttore
SandBox
Costruisci un nuovo oggetto sandbox di sicurezza e inizializza il modulo di base
1new SandBox(Object mods);
Parametri di chiamata:
- mods: Oggetto, specifica il dizionario oggetto del modulo da aggiungere
Costruisci un nuovo oggetto sandbox di sicurezza e inizializza il modulo di base
1
2new SandBox(Object mods,
Function require);
Parametri di chiamata:
- mods: Oggetto, specifica il dizionario oggetto del modulo da aggiungere
- require: Funzione, funzione richiesta personalizzata, quando il modulo non esiste, chiama prima la funzione personalizzata, quindi carica dal file senza tornare
Costruisci un nuovo oggetto sandbox di sicurezza globale indipendente e inizializza il modulo di base
1
2new SandBox(Object mods,
Object global);
Parametri di chiamata:
- mods: Oggetto, specifica il dizionario oggetto del modulo da aggiungere
- global: Oggetto, specifica la proprietà Global inizializzata
Costruisci un nuovo oggetto sandbox di sicurezza globale indipendente e inizializza il modulo di base
1
2
3new SandBox(Object mods,
Function require,
Object global);
Parametri di chiamata:
- mods: Oggetto, specifica il dizionario oggetto del modulo da aggiungere
- require: Funzione, funzione richiesta personalizzata, quando il modulo non esiste, chiama prima la funzione personalizzata, quindi carica dal file senza tornare
- global: Oggetto, specifica la proprietà Global inizializzata
Attributi dei membri
global
Oggetto, query sandbox global Oggetto
1readonly Object SandBox.global;
modules
Oggetto, interroga l'oggetto dizionario di tutti i moduli esistenti nella sandbox
1readonly Object SandBox.modules;
Funzione membro
add
Aggiungi un modulo base alla sandbox
1
2SandBox.add(String id,
Value mod);
Parametri di chiamata:
- id: String, specificare il nome del modulo da aggiungere, questo percorso non ha nulla a che fare con lo script attualmente in esecuzione, deve essere un percorso assoluto o il nome del modulo
- mod: Valore, specificare l'oggetto modulo da aggiungere
Aggiungi un set di moduli di base alla sandbox
1SandBox.add(Object mods);
Parametri di chiamata:
- mods: Oggetto, specificare il dizionario oggetto del modulo da aggiungere, il modulo javascript aggiunto genererà una copia per evitare l'interferenza degli oggetti di modifica sandbox
addScript
Aggiungi un modulo di script alla sandbox
1
2Value SandBox.addScript(String srcname,
Buffer script);
Parametri di chiamata:
- srcname: String, specificare il nome dello script da aggiungere, srcname deve includere l'estensione, ad esempio json Oppure js, jsc
- script: Buffer, Specificare il codice binario da aggiungere
Risultato di ritorno:
- Value, Restituisce l'oggetto modulo caricato
remove
Elimina il modulo di base specificato dalla sandbox
1SandBox.remove(String id);
Parametri di chiamata:
- id: String, specificare il nome del modulo da eliminare, questo percorso non ha nulla a che fare con lo script attualmente in esecuzione, deve essere un percorso assoluto o il nome del modulo
has
Rileva l'esistenza del modulo base dalla sandbox
1Boolean SandBox.has(String id);
Parametri di chiamata:
- id: String, specificare il nome del modulo da rilevare, questo percorso non ha nulla a che fare con lo script attualmente in esecuzione, deve essere un percorso assoluto o il nome del modulo
Risultato di ritorno:
- Boolean, esiste?
clone
Copia la sandbox corrente, la nuova sandbox contiene i moduli della sandbox corrente, con lo stesso nome e funzione require
1SandBox SandBox.clone();
Risultato di ritorno:
- SandBox, Nuova sandbox copiata
freeze
Congela la sandbox corrente, la sandbox dopo il congelamento, giusto global Le modifiche apportate verranno ignorate
1SandBox.freeze();
refresh
Ricaricare il modulo nella sandbox, questa operazione reinizializzerà solo il modulo, reimposterà le variabili nel modulo e non aggiornerà il codice del modulo
1SandBox.refresh();
run
Esegui uno script
1
2SandBox.run(String fname,
Array argv = []);
Parametri di chiamata:
- fname: String, specifica il percorso dello script da eseguire, questo percorso non ha nulla a che fare con lo script attualmente in esecuzione, deve essere un percorso assoluto
- argv: Array, specifica il parametro da eseguire, questo parametro può essere ottenuto usando argv nello script
resolve
Interroga un modulo e restituisce il nome completo del file del modulo
1
2String SandBox.resolve(String id,
String base);
Parametri di chiamata:
- id: Stringa, specifica il nome del modulo da caricare
- base: Stringa, specifica il percorso di ricerca
Risultato di ritorno:
- String, Restituisce il nome completo del file del modulo caricato
require
Carica un modulo e restituisci l'oggetto modulo
1
2Value SandBox.require(String id,
String base);
Parametri di chiamata:
- id: Stringa, specifica il nome del modulo da caricare
- base: Stringa, specifica il percorso di ricerca
Risultato di ritorno:
- Value, Restituisce l'oggetto modulo caricato
setModuleCompiler
Aggiungi il compilatore all'extname specificato, extname non può essere l'estensione integrata del sistema (incluso ('.js','.json','.jsc','.wasm'}), il compilatore deve restituire uno script javascript valido.
1
2SandBox.setModuleCompiler(String extname,
Function compiler);
Parametri di chiamata:
- extname: String, l'extname specificato, deve iniziare con'.', ed è un'estensione integrata non di sistema
- compiler: Funzione, compila la funzione di callback, tutti i file con extname richiedono solo una volta.Il formato della funzione di callback è
compiler(buf, requireInfo)
, buf è il file lettoBuffer, la struttura requireInfo è{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({});
// 编译 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
Restituisce la rappresentazione in stringa dell'oggetto, generalmente restituisce "[Native Object]", l'oggetto può essere re-implementato secondo le proprie caratteristiche
1String SandBox.toString();
Risultato di ritorno:
- String, Restituisce la rappresentazione di stringa dell'oggetto
toJSON
Restituisce la rappresentazione in formato JSON dell'oggetto, generalmente restituisce una raccolta di attributi leggibili definiti dall'oggetto
1Value SandBox.toJSON(String key = "");
Parametri di chiamata:
- key: Stringa, inutilizzata
Risultato di ritorno:
- Value, Restituisce un valore contenente JSON serializzabile