オブジェクト組み込みオブジェクト

オブジェクトサンドボックス

独立した操作スペースを管理するために使用されるセキュリティ サンドボックス オブジェクト

すべてのコードは独自のサンドボックスで実行され、グローバル require は現在のサンドボックスを呼び出してモジュールをロードし、サンドボックスは require を介してロードされたサンドボックスに渡されます。次の例では、サンドボックスを作成し、グローバル基本モジュールへのアクセスを制限しますassert モジュール、および 2 つのカスタム モジュール 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: オブジェクト、追加するモジュール オブジェクト ディクショナリを指定します

新しいセキュリティ サンドボックス オブジェクトを構築し、基本モジュールを初期化します

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

呼び出しパラメータ:

  • mods: オブジェクト、追加するモジュール オブジェクト ディクショナリを指定します
  • require: 関数、カスタムのrequire関数、モジュールが存在しない場合は、最初にカスタム関数を呼び出してから、返さずにファイルからロードします

新しい独立したグローバル セキュリティ サンドボックス オブジェクトを構築し、基本モジュールを初期化します

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

呼び出しパラメータ:

  • mods: オブジェクト、追加するモジュール オブジェクト ディクショナリを指定します
  • global: オブジェクト、初期化されたグローバル プロパティを指定します

新しい独立したグローバル セキュリティ サンドボックス オブジェクトを構築し、基本モジュールを初期化します

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

呼び出しパラメータ:

  • mods: オブジェクト、追加するモジュール オブジェクト ディクショナリを指定します
  • require: 関数、カスタムのrequire関数、モジュールが存在しない場合は、最初にカスタム関数を呼び出してから、返さずにファイルからロードします
  • global: オブジェクト、初期化されたグローバル プロパティを指定します

メンバーの属性

global

オブジェクト、クエリ サンドボックス global オブジェクト

1
readonly Object SandBox.global;

modules

オブジェクト、サンドボックス内のすべての既存モジュールのディクショナリ オブジェクトをクエリします

1
readonly Object SandBox.modules;

メンバー関数

add

サンドボックスに基本モジュールを追加する

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

呼び出しパラメータ:

  • id: 文字列、追加するモジュールの名前を指定します。このパスは現在実行中のスクリプトとは関係ありません。絶対パスまたはモジュール名である必要があります
  • mod: 値、追加するモジュール オブジェクトを指定します

サンドボックスに基本モジュールのセットを追加する

1
SandBox.add(Object mods);

呼び出しパラメータ:

  • mods: オブジェクト、追加するモジュール オブジェクト ディクショナリを指定します。追加された javascript モジュールは、サンドボックス変更オブジェクトの干渉を避けるためにコピーを生成します

addScript

サンドボックスにスクリプト モジュールを追加する

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

呼び出しパラメータ:

  • srcname: 文字列、追加するスクリプトの名前を指定します。srcname には、次のような拡張子を含める必要があります。 json またはjs、jsc
  • script: Buffer、追加するバイナリコードを指定

結果を返す:

  • Value, ロードされたモジュール オブジェクトを返す

remove

指定された基本モジュールをサンドボックスから削除します

1
SandBox.remove(String id);

呼び出しパラメータ:

  • id: 文字列、削除するモジュールの名前を指定します。このパスは現在実行中のスクリプトとは関係ありません。絶対パスまたはモジュール名である必要があります

has

サンドボックスから基本モジュールの存在を検出

1
Boolean SandBox.has(String id);

呼び出しパラメータ:

  • id: 文字列、検出するモジュールの名前を指定します。このパスは現在実行中のスクリプトとは関係ありません。絶対パスまたはモジュール名である必要があります

結果を返す:

  • 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: 文字列、実行するスクリプト パスを指定します。このパスは、現在実行中のスクリプトとは関係ありません。絶対パスである必要があります
  • argv: 配列、実行するパラメータを指定します。このパラメータは、スクリプトで argv を使用して取得できます

resolve

モジュールを照会し、モジュールの完全なファイル名を返します

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

呼び出しパラメータ:

  • id: 文字列、ロードするモジュールの名前を指定
  • base: 文字列、検索パスを指定

結果を返す:

  • String, ロードされたモジュールの完全なファイル名を返します

require

モジュールをロードしてモジュールオブジェクトを返す

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

呼び出しパラメータ:

  • id: 文字列、ロードするモジュールの名前を指定
  • base: 文字列、検索パスを指定

結果を返す:

  • Value, ロードされたモジュール オブジェクトを返す

setModuleCompiler

指定された extname にコンパイラーを追加します。extname はシステム組み込み拡張子 (('.js',' を含む) にすることはできません。json','.jsc','.wasm'})、コンパイラは有効な javascript スクリプトを返す必要があります。

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

呼び出しパラメータ:

  • extname: 指定された 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

オブジェクトの文字列表現を返します。通常は「[ネイティブ オブジェクト]」を返します。オブジェクトは独自の特性に従って再実装できます。

1
String SandBox.toString();

結果を返す:

  • String、オブジェクトの文字列表現を返します

toJSON

オブジェクトの JSON 形式の表現を返します。通常は、オブジェクトによって定義された読み取り可能な属性のコレクションを返します。

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

呼び出しパラメータ:

  • key: ストリング、未使用

結果を返す:

  • Value、シリアライズ可能なJSONを含む値を返します