ノード内のVMのコンテキストでどのように値を取得しますか。ノードのコアvmモジュールから値を取得する
コンテキストを作成してスクリプトを実行すると、util.inspect([[context]])
を使用しますか?
もし私がしたら、それは連載されて戻ってくるのですか?それは '\'null'\'
に戻ってくる、私はutil.inspect("null")
何らかの理由で
いずれも理由がわからんし、また、ノードVMのモジュールで実行コンテキストから値を取得するにはどのような最良の方法は?
私はまた、いくつかのマイクロベンチマークを行いました。新しいコンテキストの作成は、thisContext
での実行よりもはるかに遅いようです。また、私はタイムアウトを取り除くと、そのように見える多くのを実行しているようです。
だから、漏れを起こさないためにグローバルを使わずにこのコンテキストを使いたいと思っています。また、このパフォーマンスをスピードアップしようとしています。
このコードのコンテキストは、私が大惨事な正規表現をサンドボックスしようとしていることです。
global.mapperContext = {
result: false
};
const scriptString = `
global.mapperContext.result = true;
if ("${string}".match(${regex})) {
global.mapperContext.result = false;
}
`;
const vmScript = new vm.script(scriptString);
try {
vmScript.runInThisContext({ timeout: 1000 });
} catch (e) {
// Do something with error
}
// This works but I dont like attaching things to the global object.
// I could cause memory leaks...
console.log(global.mapperContext);
const mapperContext = { result };
const scriptString = `
(function IIFE() {
result = true;
if ("${string}".match(${regex})) {
result = false;
}
})()
`;
const sandbox = vm.createContext(mapperContext);
const script = new vm.script(scriptString);
script.runInContext(script, sandbox, {timeout: 1000});
// This result is serialized and is hard to parse.
util.inspect(sandbox.result);
達成しようとしているものの簡単な(コード)例を提供できますか? – mscdex
@mscdexチケットを更新しました。 –