Объект встроенный объект

Объект SandBox

Объект песочницы безопасности для управления одним рабочим пространством

Весь код выполняется в своей собственной песочнице. Глобальное требование вызовет текущий загрузочный модуль песочницы, и песочница будет передана загруженной песочнице через требование В следующем примере создается песочница, которая ограничивает доступ к модулю assert в глобальном базовом модуле и добавляет два пользовательских модуля a и 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');

наследование

конструктор

SandBox

Создайте новый объект песочницы безопасности и инициализируйте базовый модуль.

1
new SandBox(Object mods);

Параметры звонка:

  • mods : Object, определяет словарь объектов модуля для добавления

Создайте новый объект песочницы безопасности и инициализируйте базовый модуль.

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

Параметры звонка:

  • mods : Object, определяет словарь объектов модуля для добавления
  • require : Function, пользовательская функция require. Когда модуль не существует, пользовательская функция вызывается первой. Если нет возврата, функция загружается из файла.

Создает новый объект Global Security Sandbox и инициализирует базовый модуль.

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

Параметры звонка:

  • mods : Object, определяет словарь объектов модуля для добавления
  • global : Object, указывает инициализированное свойство Global

Создает новый объект Global Security Sandbox и инициализирует базовый модуль.

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

Параметры звонка:

  • mods : Object, определяет словарь объектов модуля для добавления
  • require : Function, пользовательская функция require. Когда модуль не существует, пользовательская функция вызывается первой. Если нет возврата, функция загружается из файла.
  • global : Object, указывает инициализированное свойство Global

Атрибуты члена

global

Объект, запросить global объект песочницы

1
readonly Object SandBox.global;

modules

Объект, запросить словарь объектов всех модулей в песочнице

1
readonly Object SandBox.modules;

Функция-член

add

Добавить базовый модуль в песочницу

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

Параметры звонка:

  • id : String, указывает имя добавляемого модуля. Этот путь не связан с текущим запущенным скриптом. Это должен быть абсолютный путь или имя модуля
  • mod : Value, указывает объект модуля, который будет добавлен

Добавить набор базовых модулей в песочницу

1
SandBox.add(Object mods);

Параметры звонка:

  • mods : Object, определяет словарь объекта модуля, который будет добавлен, добавленный модуль javascript сгенерирует копию, чтобы избежать «песочниц», чтобы изменить объект и мешать друг другу

addScript

Добавить модуль скрипта в песочницу

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

Параметры звонка:

  • srcname : String, укажите имя сценария, который будет добавлен, srcname должно включать расширение, такое как json или js, jsc
  • script : Buffer , указывает двоичный код, который будет добавлен

Возвращает результат:

  • Value , возвращает загруженный объект модуля

remove

Удалить указанный базовый модуль из песочницы

1
SandBox.remove(String id);

Параметры звонка:

  • id : String, указывает имя удаляемого модуля. Этот путь не связан с текущим запущенным скриптом. Это должен быть абсолютный путь или имя модуля

has

Определить наличие базового модуля из песочницы

1
Boolean SandBox.has(String id);

Параметры звонка:

  • id : String, указывает имя обнаруживаемого модуля, этот путь не связан с текущим запущенным сценарием, это должен быть абсолютный путь или имя модуля

Возвращает результат:

  • Boolean , существует ли оно

clone

Дублируйте текущую песочницу, новая песочница содержит модули текущей песочницы с тем же именем и функцией require

1
SandBox SandBox.clone();

Возвращает результат:

  • SandBox , скопируйте новую песочницу

freeze

Заморозьте текущую песочницу и замороженную песочницу. Изменения, внесенные в global версию, будут игнорироваться.

1
SandBox.freeze();

refresh

Перезагрузите модуль в песочнице.Эта операция только повторно инициализирует модуль, сбрасывает переменные в модуле и не обновляет код модуля.

1
SandBox.refresh();

run

Запустить скрипт

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

Параметры звонка:

  • fname : String, указывает путь к скрипту, который должен быть запущен, этот путь не связан с запущенным в данный момент скриптом и должен быть абсолютным путем
  • argv : Array, укажите параметры для запуска, этот параметр можно получить в скрипте с помощью argv

resolve

Запросить модуль и вернуть полное имя файла модуля

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

Параметры звонка:

  • id : String, указывает имя загружаемого модуля
  • base : String, указывает путь поиска

Возвращает результат:

  • String , возвращает полное имя файла загруженного модуля

require

Загрузите модуль и верните объект модуля

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

Параметры звонка:

  • id : String, указывает имя загружаемого модуля
  • base : String, указывает путь поиска

Возвращает результат:

  • Value , возвращает загруженный объект модуля

setModuleCompiler

Добавить компилятор к указанному extname.Extname не может быть встроенным расширением системы (включая ('.js', '. json ', '.jsc', '.wasm')).

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

Параметры звонка:

  • extname : String, указанное extname, должно начинаться с '.' и является несистемным встроенным расширением
  • compiler : функция, функция обратного вызова компиляции, все файлы с extname требуются только один раз. Формат этой функции обратного вызова - compiler(buf, requireInfo) , buf - Buffer чтения файла, а структура 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

Возвращает строковое представление объекта, обычно «[Native Object]». Объекты могут быть переопределены в соответствии с их собственными характеристиками

1
String SandBox.toString();

Возвращает результат:

  • String , возвращает строковое представление объекта

toJSON

Возвращает JSON-представление объекта, обычно возвращая коллекцию читаемых свойств, определенных объектом

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

Параметры звонка:

  • key : строка, не используется

Возвращает результат:

  • Value , возвращает значение, содержащее сериализуемый JSON