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

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

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

すべてのコードは独自のサンドボックスで実行され、グローバル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:関数、カスタム要求関数、モジュールが存在しない場合は、最初にカスタム関数を呼び出してから、返さずにファイルからロードします

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

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

呼び出しパラメーター:

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

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

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

呼び出しパラメーター:

  • mods:オブジェクト、追加するモジュールオブジェクトディクショナリを指定します
  • 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
  • scriptBuffer、追加するバイナリコードを指定します

戻り結果:

  • 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を持つすべてのファイルは1回だけ必要です。コールバック関数の形式は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

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

1
String SandBox.toString();

戻り結果:

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

toJSON

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

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

呼び出しパラメーター:

  • key:文字列、未使用

戻り結果:

  • Value、シリアル化可能なJSONを含む値を返します