Objeto objeto incorporado

Objeto SandBox

Objeto sandbox de seguridad, utilizado para administrar un espacio de ejecución independiente

Todo el código se ejecuta en su propia caja de arena. El requisito global llamará al módulo de carga de la caja de arena actual, y la caja de arena se pasará a la caja de arena cargada a través de require. El siguiente ejemplo crea un entorno limitado, restringe el acceso al módulo de assert en el módulo base global y agrega dos módulos personalizados ayb:

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

Herencia

Constructor

SandBox

Construya un nuevo objeto sandbox de seguridad e inicialice el módulo básico

1
new SandBox(Object mods);

Parámetros de llamada:

  • mods : Object, especifica el diccionario de objetos del módulo para agregar

Construya un nuevo objeto sandbox de seguridad e inicialice el módulo básico

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

Parámetros de llamada:

  • mods : Object, especifica el diccionario de objetos del módulo para agregar
  • require : Function, custom require function, cuando el módulo no existe, llame primero a la función personalizada y luego cárguela desde el archivo sin volver

Construya un nuevo objeto de seguridad global independiente e inicialice el módulo básico

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

Parámetros de llamada:

  • mods : Object, especifica el diccionario de objetos del módulo para agregar
  • global : objeto, especifique la propiedad global inicializada

Construya un nuevo objeto de seguridad global independiente e inicialice el módulo básico

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

Parámetros de llamada:

  • mods : Object, especifica el diccionario de objetos del módulo para agregar
  • require : Function, custom require function, cuando el módulo no existe, llame primero a la función personalizada y luego cárguela desde el archivo sin volver
  • global : objeto, especifique la propiedad global inicializada

Atributo miembro

global

Objeto, consulta el objeto global del sandbox

1
readonly Object SandBox.global;

modules

Objeto, consulta los objetos del diccionario de todos los módulos existentes en el sandbox

1
readonly Object SandBox.modules;

Función miembro

add

Agregar un módulo básico al sandbox

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

Parámetros de llamada:

  • id : String, especifique el nombre del módulo que se agregará, esta ruta no tiene nada que ver con el script actual, debe ser una ruta absoluta o un nombre de módulo
  • mod : Valor, especifique el objeto del módulo para agregar

Agregue un conjunto de módulos básicos al sandbox.

1
SandBox.add(Object mods);

Parámetros de llamada:

  • mods : Object, especifique el diccionario de objetos del módulo que se agregará, el módulo javascript agregado generará una copia para evitar interferencias mutuas causadas por objetos de modificación de sandbox

addScript

Agregar un módulo de secuencia de comandos al entorno limitado

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

Parámetros de llamada:

  • srcname : String, especifique el nombre del script que se agregará, srcname debe contener la extensión, como json o js, ​​jsc
  • script : Buffer , especifique el código binario que se agregará

Resultado devuelto:

  • Value , devuelve el objeto del módulo cargado

remove

Eliminar el módulo básico especificado del sandbox

1
SandBox.remove(String id);

Parámetros de llamada:

  • id : String, especifique el nombre del módulo que se va a eliminar, esta ruta no tiene nada que ver con el script en ejecución actual, debe ser una ruta absoluta o un nombre de módulo

has

Verifique si el módulo básico existe desde el sandbox

1
Boolean SandBox.has(String id);

Parámetros de llamada:

  • id : String, especifique el nombre del módulo que se detectará, esta ruta no tiene nada que ver con el script que se está ejecutando actualmente, debe ser una ruta absoluta o un nombre de módulo

Resultado devuelto:

  • Boolean , si existe

clone

Copie el sandbox actual, el nuevo sandbox contiene el módulo del sandbox actual y el mismo nombre y requiere función

1
SandBox SandBox.clone();

Resultado devuelto:

  • SandBox , el nuevo sandbox copiado

freeze

Congelar la caja de arena actual, después de la congelación de la caja de arena, los cambios realizados en global serán ignorados

1
SandBox.freeze();

refresh

Vuelva a cargar el módulo en el sandbox, esta operación solo reiniciará el módulo, restablecerá las variables en el módulo y no actualizará el código del módulo

1
SandBox.refresh();

run

Ejecuta un script

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

Parámetros de llamada:

  • fname : String, especifique la ruta del script que se ejecutará, esta ruta no tiene nada que ver con el script actual en ejecución, debe ser una ruta absoluta
  • argv : matriz, especifique el parámetro que se ejecutará, este parámetro se puede obtener utilizando argv en el script

resolve

Consultar un módulo y devolver el nombre de archivo completo del módulo

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

Parámetros de llamada:

  • id : String, especifique el nombre del módulo que se cargará
  • base : String, especifique la ruta de búsqueda

Resultado devuelto:

  • String , devuelve el nombre de archivo completo del módulo cargado

require

Cargue un módulo y devuelva el objeto del módulo

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

Parámetros de llamada:

  • id : String, especifique el nombre del módulo que se cargará
  • base : String, especifique la ruta de búsqueda

Resultado devuelto:

  • Value , devuelve el objeto del módulo cargado

setModuleCompiler

Agregue el compilador al extname especificado. Extname no puede ser la extensión incorporada del sistema (incluyendo ('.js', '. json ', '. Jsc', '. Wasm')), el compilador debe devolver un script javascript válido.

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

Parámetros de llamada:

  • extname : String, el extname especificado debe comenzar con '.', y es una extensión incorporada que no es del sistema
  • compiler : Función, función de devolución de llamada de compilación, todos los archivos con extname solo se requerirán una vez. El formato de la función de devolución de llamada es compiler(buf, requireInfo) , buf es el Buffer lectura del archivo y la estructura de requireInfo es {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

Devuelve la representación de cadena del objeto, generalmente devuelve "[Objeto nativo]", el objeto se puede volver a implementar de acuerdo con sus propias características

1
String SandBox.toString();

Resultado devuelto:

  • String , devuelve una representación de cadena del objeto

toJSON

Devuelve la representación en formato JSON del objeto, generalmente devuelve una colección de atributos legibles definidos por el objeto

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

Parámetros de llamada:

  • key : cadena, sin usar

Resultado devuelto:

  • Value , devuelve un valor que contiene JSON serializable