Oggetto oggetto incorporato

Oggetto SandBox

Oggetto sandbox di sicurezza, utilizzato per gestire uno spazio operativo indipendente

Tutto il codice viene eseguito nella propria sandbox, la richiesta globale chiamerà la sandbox corrente per caricare il modulo e la sandbox verrà passata alla sandbox caricata tramite require. L'esempio seguente crea un sandbox, limita l'accesso solo al modulo di assert nel modulo base globale e aggiunge due moduli personalizzati, a e b:

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

Eredità

Costruttore

SandBox

Costruisci un nuovo oggetto sandbox di sicurezza e inizializza il modulo di base

1
new SandBox(Object mods);

Parametri di chiamata:

  • mods : Object, specifica il dizionario dell'oggetto del modulo da aggiungere

Costruisci un nuovo oggetto sandbox di sicurezza e inizializza il modulo di base

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

Parametri di chiamata:

  • mods : Object, specifica il dizionario dell'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 2
new SandBox(Object mods, Object global);

Parametri di chiamata:

  • mods : Object, specifica il dizionario dell'oggetto del modulo da aggiungere
  • global : Object, specifica la proprietà Global inizializzata

Costruisci un nuovo oggetto sandbox di sicurezza globale indipendente e inizializza il modulo di base

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

Parametri di chiamata:

  • mods : Object, specifica il dizionario dell'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 : Object, specifica la proprietà Global inizializzata

Attributi dei membri

global

Object, interroga l'oggetto global della sandbox

1
readonly Object SandBox.global;

modules

Oggetto, interroga l'oggetto dizionario di tutti i moduli esistenti nella sandbox

1
readonly Object SandBox.modules;

Funzione membro

add

Aggiungi un modulo di base alla sandbox

1 2
SandBox.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 : Value, specifica l'oggetto modulo da aggiungere

Aggiungi una serie di moduli di base alla sandbox

1
SandBox.add(Object mods);

Parametri di chiamata:

  • mods : Object, specifica il dizionario oggetto del modulo da aggiungere, il modulo javascript aggiunto genererà una copia per evitare interferenze tra gli oggetti di modifica sandbox

addScript

Aggiungi un modulo di script alla sandbox

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

Parametri di chiamata:

  • srcname : String, specifica il nome dello script da aggiungere, srcname deve includere l'estensione, come json o js, ​​jsc
  • script : Buffer , specifica il codice binario da aggiungere

Risultato di ritorno:

  • Value , restituisce l'oggetto modulo caricato

remove

Elimina il modulo di base specificato dalla sandbox

1
SandBox.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

Controlla se il modulo di base esiste dalla sandbox

1
Boolean SandBox.has(String id);

Parametri di chiamata:

  • id : String, specifica 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 la funzione require

1
SandBox SandBox.clone();

Risultato di ritorno:

  • SandBox , la nuova sandbox copiata

freeze

Blocca la sandbox corrente, la sandbox congelata, le modifiche apportate a global verranno ignorate

1
SandBox.freeze();

refresh

Ricarica il modulo nella sandbox, questa operazione reinizializzerà solo il modulo, resetterà le variabili nel modulo e non aggiornerà il codice del modulo

1
SandBox.refresh();

run

Esegui uno script

1 2
SandBox.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 utilizzando argv nello script

resolve

Interroga un modulo e restituisci il nome file completo del modulo

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

Parametri di chiamata:

  • id : String, specifica il nome del modulo da caricare
  • base : String, specifica il percorso di ricerca

Risultato di ritorno:

  • String , restituisce il nome file completo del modulo caricato

require

Carica un modulo e restituisci l'oggetto modulo

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

Parametri di chiamata:

  • id : String, specifica il nome del modulo da caricare
  • base : String, 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 incorporata del sistema (inclusi ('.js', '. json ', '. Jsc', '. Wasm')), il compilatore deve restituire uno script javascript valido.

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

Parametri di chiamata:

  • extname : String, l'extname specificato deve iniziare con "." ed è un'estensione incorporata non di sistema
  • compiler : funzione, compila funzione di callback, tutti i file con extname richiederanno una sola volta. Il formato della funzione di callback è compiler(buf, requireInfo) , buf è il Buffer file letto e 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 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

Restituisce la rappresentazione in stringa dell'oggetto, generalmente restituisce "[Native Object]", l'oggetto può essere reimplementato secondo le proprie caratteristiche

1
String 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

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

Parametri di chiamata:

  • key : stringa, non utilizzata

Risultato di ritorno:

  • Value , restituisce un valore contenente JSON serializzabile