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

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

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

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

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

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などの拡張子を含める必要があります。
  • 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

( 『、(」の.js'を含む指定されたEXTNAMEにコンパイラを追加し、EXTNAMEは、内蔵の拡張システムすることはできません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を含む値を返します