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

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

独立した実行スペースを管理するために使用される、分離されたサンドボックス オブジェクト

すべてのコードは独自のサンドボックスで実行され、グローバル 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');

SandBox は攻撃を防ぐセキュリティ サンドボックスではないことに注意してください。SandBox は、異なるコードを分離し、相互干渉を回避するために使用できる独立した実行スペースにすぎませんが、悪意のあるコードを防ぐことはできません。

相続関係

コンストラクタ

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;

メンバー関数

addBuiltinModules

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

1
SandBox.addBuiltinModules();

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

現在のサンドボックスをコピーします。新しいサンドボックスには、同じ名前と require 機能を持つ現在のサンドボックスのモジュールが含まれています。

1
SandBox SandBox.clone();

返される結果:

  • SandBox、新しいサンドボックスをコピーしました

freeze

現在のサンドボックスと凍結されたサンドボックスを凍結します。global加えられた変更は無視されます

1
SandBox.freeze();

run

スクリプトを実行する

1
SandBox.run(String fname);

呼び出しパラメータ:

  • fname: 文字列。実行するスクリプトのパスを指定します。このパスは現在実行中のスクリプトとは関係がないため、絶対パスである必要があります。

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: 文字列。指定された拡張名は「.」で始まる必要があり、システムに組み込まれていない拡張子です。
  • 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({}); // compile ts to js and load sbox.setModuleCompiler('.ts', tsCompiler); var mod_ts = sbox.require('./a.ts'); // compile coffee to js and load sbox.setModuleCompiler('.coffee', cafeCompiler); var mod_coffee = sbox.require('./a.coffee'); // compile jsx to js and load sbox.setModuleCompiler('.jsx', reactCompiler); var mod_react = sbox.require('./a.jsx'); // compile yaml to rest and load sbox.setModuleCompiler('.yml', yaml2Rest) sbox.setModuleCompiler('.yaml', yaml2Rest) // compile markdown to html and load 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 を含む値を返します