Oggetto oggetto incorporato

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 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à

#lineWidth: 1.5 #font: Helvetica,sans-Serif #fontSize: 10 #leading: 1.6 #.this: fill=lightgray #.class: fill=white [<class>object|toString();toJSON()] [<this>SandBox|new SandBox()|global;modules|add();addScript();remove();has();clone();freeze();refresh();run();resolve();require();setModuleCompiler()] [object] <:- [SandBox] SandBox new SandBox() global modules add() addScript() remove() has() clone() freeze() refresh() run() resolve() require() setModuleCompiler() object toString() toJSON()

Costruttore

SandBox

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

1
new 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 2
new 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 2
new 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 3
new 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

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 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: Valore, specificare l'oggetto modulo da aggiungere

Aggiungi un set di moduli di base alla sandbox

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

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

Rileva l'esistenza del modulo base dalla sandbox

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

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

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

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 usando argv nello script

resolve

Interroga un modulo e restituisce il nome completo del file del modulo

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

Parametri di chiamata:

  • id: String, 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 2
Value SandBox.require(String id, String base);

Parametri di chiamata:

  • id: String, 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 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 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 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 re-implementato 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, inutilizzata

Risultato di ritorno:

  • Value, Restituisce un valore contenente JSON serializzabile