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

Объект SandBox

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

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

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

#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()

Конструктор

SandBox

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

1
new SandBox(Object mods);

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

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

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

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

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

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

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

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

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

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

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

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

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

  • mods: Object, укажите словарь объекта модуля, который нужно добавить
  • require: Функция, настраиваемая функция требования, когда модуль не существует, сначала вызовите настраиваемую функцию, а затем загрузите из файла без возврата
  • global: Object, укажите инициализированное глобальное свойство

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

global

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

1
readonly Object SandBox.global;

modules

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

1
readonly Object SandBox.modules;

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

add

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

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

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

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

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

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

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

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 '}), компилятор должен вернуть действительный скрипт javascript.

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

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

  • extname: String, указанное внешнее имя, должно начинаться с '.' И является несистемным встроенным расширением.
  • 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