Objeto objeto integrado

Objeto SandBox

Objeto de caja de arena de seguridad, utilizado para administrar un espacio operativo independiente

Todo el código se ejecuta en su propia caja de arena, el requerimiento global llamará a la caja de arena actual para cargar el módulo, y la caja de arena se pasará a la caja de arena cargada a través de require. El siguiente ejemplo crea una caja de arena, restringe el acceso solo 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 de espacio aislado de seguridad e inicialice el módulo básico

1
new SandBox(Object mods);

Parámetros de llamada:

  • mods : Objeto, especifique el diccionario de objetos del módulo que se agregará

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

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

Parámetros de llamada:

  • mods : Objeto, especifique el diccionario de objetos del módulo que se agregará
  • require : Función, función personalizada requerida, cuando el módulo no existe, llama primero a la función personalizada y luego carga desde el archivo sin regresar

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

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

Parámetros de llamada:

  • mods : Objeto, especifique el diccionario de objetos del módulo que se agregará
  • global : objeto, especifique la propiedad global inicializada

Construya un nuevo objeto sandbox 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 : Objeto, especifique el diccionario de objetos del módulo que se agregará
  • require : Función, función personalizada requerida, cuando el módulo no existe, llama primero a la función personalizada y luego carga desde el archivo sin regresar
  • global : objeto, especifique la propiedad global inicializada

Atributos de miembros

global

Objeto, consulta el objeto global del sandbox

1
readonly Object SandBox.global;

modules

Objeto, consulta el objeto de diccionario de todos los módulos existentes en la zona de pruebas

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 que se está ejecutando actualmente, debe ser una ruta absoluta o un nombre de módulo
  • mod : Valor, especifique el objeto de módulo que se agregará

Agregar un conjunto de módulos básicos a la zona de pruebas

1
SandBox.add(Object mods);

Parámetros de llamada:

  • mods : Objeto, especifique el diccionario de objetos del módulo que se agregará, el módulo javascript agregado generará una copia para evitar interferencias entre los objetos de modificación de la zona de pruebas

addScript

Agregar un módulo de secuencia de comandos a la zona de pruebas

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 incluir la extensión, como json o js, ​​jsc
  • script : Buffer , especifique el código binario que se agregará

Devolver resultado:

  • Value , devuelve el objeto del módulo cargado

remove

Eliminar el módulo básico especificado de la zona de pruebas

1
SandBox.remove(String id);

Parámetros de llamada:

  • id : String, especifique el nombre del módulo que se eliminará, 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

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

Devolver resultado:

  • Boolean , existe

clone

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

1
SandBox SandBox.clone();

Devolver resultado:

  • SandBox , el nuevo sandbox copiado

freeze

Congelar la caja de arena actual, la caja de arena congelada, los cambios realizados en global se ignorarán

1
SandBox.freeze();

refresh

Vuelve a cargar el módulo en el sandbox. Esta operación solo reinicializará el módulo, restablecerá las variables en el módulo y no actualizará el código del módulo.

1
SandBox.refresh();

run

Ejecutar una secuencia de comandos

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

Parámetros de llamada:

  • fname : Cadena, especifique la ruta del script que se ejecutará, esta ruta no tiene nada que ver con el script que se está ejecutando actualmente, debe ser una ruta absoluta
  • argv : Array, especifique el parámetro a ejecutar, este parámetro se puede obtener usando 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

Devolver resultado:

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

require

Cargar un módulo y devolver 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

Devolver resultado:

  • Value , devuelve el objeto del módulo cargado

setModuleCompiler

Agregue el compilador al extname especificado, extname no puede ser una extensión incorporada en el sistema (incluyendo ('.js', '. json ', '. Jsc', '. Wasm')), el compilador necesita 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 un '.' 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 archivo de lectura y la estructura 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();

Devolver resultado:

  • String , devuelve la 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 : String, sin usar

Devolver resultado:

  • Value , devuelve un valor que contiene JSON serializable