Объект SandBox
Объект песочницы безопасности, используемый для управления независимым операционным пространством
Весь код выполняется в собственной песочнице, глобальное требование вызовет текущую песочницу для загрузки модуля, а песочница будет передана в загруженную песочницу через require. В следующем примере создается песочница и ограничивается доступ к глобальному базовому модулю.assert Module и добавьте два настраиваемых модуля, a и b:
1
2
3
4
5
6
7
8var 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
Создайте новый объект песочницы безопасности и инициализируйте базовый модуль.
1new SandBox(Object mods);
Параметры звонка:
- mods: Object, укажите словарь объекта модуля, который нужно добавить
Создайте новый объект песочницы безопасности и инициализируйте базовый модуль.
1
2new SandBox(Object mods,
Function require);
Параметры звонка:
- mods: Object, укажите словарь объекта модуля, который нужно добавить
- require: Функция, настраиваемая функция требования, когда модуль не существует, сначала вызовите настраиваемую функцию, а затем загрузите из файла без возврата
Создайте новый независимый объект песочницы глобальной безопасности и инициализируйте базовый модуль.
1
2new SandBox(Object mods,
Object global);
Параметры звонка:
- mods: Object, укажите словарь объекта модуля, который нужно добавить
- global: Object, укажите инициализированное глобальное свойство
Создайте новый независимый объект песочницы глобальной безопасности и инициализируйте базовый модуль.
1
2
3new SandBox(Object mods,
Function require,
Object global);
Параметры звонка:
- mods: Object, укажите словарь объекта модуля, который нужно добавить
- require: Функция, настраиваемая функция требования, когда модуль не существует, сначала вызовите настраиваемую функцию, а затем загрузите из файла без возврата
- global: Object, укажите инициализированное глобальное свойство
Атрибуты члена
global
Объект, песочница запроса global Объект
1readonly Object SandBox.global;
modules
Object, запросить объект словаря всех существующих модулей в песочнице
1readonly Object SandBox.modules;
Функция члена
add
Добавить базовый модуль в песочницу
1
2SandBox.add(String id,
Value mod);
Параметры звонка:
- id: String, укажите имя добавляемого модуля, этот путь не имеет ничего общего с текущим запущенным скриптом, это должен быть абсолютный путь или имя модуля
- mod: Значение, укажите добавляемый объект модуля
Добавить в песочницу набор базовых модулей
1SandBox.add(Object mods);
Параметры звонка:
- mods: Object, укажите словарь объекта модуля, который будет добавлен, добавленный модуль javascript сгенерирует копию, чтобы избежать вмешательства объектов модификации песочницы
addScript
Добавить модуль скрипта в песочницу
1
2Value SandBox.addScript(String srcname,
Buffer script);
Параметры звонка:
- srcname: String укажите имя добавляемого скрипта, srcname должно включать расширение, например json Или js, jsc
- script: Buffer, Укажите двоичный код, который нужно добавить
Результат возврата:
- Value, Верните загруженный объект модуля
remove
Удалить указанный базовый модуль из песочницы
1SandBox.remove(String id);
Параметры звонка:
- id: String, укажите имя удаляемого модуля, этот путь не имеет ничего общего с текущим запущенным скриптом, это должен быть абсолютный путь или имя модуля
has
Определить наличие базового модуля из песочницы
1Boolean SandBox.has(String id);
Параметры звонка:
- id: String, укажите имя модуля, который будет обнаружен, этот путь не имеет ничего общего с текущим запущенным скриптом, это должен быть абсолютный путь или имя модуля
Результат возврата:
- Boolean, это существует
clone
Скопируйте текущую песочницу, новая песочница содержит модули текущей песочницы, с тем же именем и требующей функции
1SandBox SandBox.clone();
Результат возврата:
- SandBox, Скопирована новая песочница
freeze
Заморозить текущую песочницу, песочницу после заморозки, правильно global Внесенные изменения будут проигнорированы.
1SandBox.freeze();
refresh
Перезагрузите модуль в песочнице, эта операция приведет только к повторной инициализации модуля, сбросу переменных в модуле и не обновит код модуля.
1SandBox.refresh();
run
Запустить скрипт
1
2SandBox.run(String fname,
Array argv = []);
Параметры звонка:
- fname: String, укажите путь к запускаемому скрипту, этот путь не имеет ничего общего с текущим запущенным скриптом, это должен быть абсолютный путь
- argv: Array, укажите параметр для запуска, этот параметр можно получить с помощью argv в скрипте
resolve
Запросить модуль и вернуть полное имя файла модуля
1
2String SandBox.resolve(String id,
String base);
Параметры звонка:
- id: String укажите имя загружаемого модуля
- base: String, укажите путь поиска
Результат возврата:
- String, Верните полное имя файла загруженного модуля
require
Загрузите модуль и верните объект модуля
1
2Value SandBox.require(String id,
String base);
Параметры звонка:
- id: String укажите имя загружаемого модуля
- base: String, укажите путь поиска
Результат возврата:
- Value, Верните загруженный объект модуля
setModuleCompiler
Добавить компилятор к указанному extname, extname не может быть встроенным расширением системы (включая ('.js', '.json','. jsc ','. wasm '}), компилятор должен вернуть действительный скрипт javascript.
1
2SandBox.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
22var 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]», объект может быть повторно реализован в соответствии с его собственными характеристиками.
1String SandBox.toString();
Результат возврата:
- String, Возвращает строковое представление объекта
toJSON
Возвращает представление объекта в формате JSON, обычно возвращает набор читаемых атрибутов, определенных объектом.
1Value SandBox.toJSON(String key = "");
Параметры звонка:
- key: Строка, не используется
Результат возврата:
- Value, Возвращает значение, содержащее сериализуемый JSON