このようなコード:
const { VM } = require('vm2')
const vm = new VM()
const res = vm.run('[1, 2, 3]')
console.log(res)
プリント:
[ 1, 2, 3, '0': 1, '1': 2, '2': 3 ]
これはバグですか、それとも予想される動作ですか?
NodeJSのVMでのビルドは次を返します。
[1, 2, 3]
予想通り。
こんにちは@patriksimek 、私はあなたをメインメンテナとして引用します。 私もこの問題を抱えています。 これはVMとNodeVMで発生します。
私の場合、NodeVM内に、-とりわけ-これを行うスニペットがあります。
const array = [];
array.push({a: 1, b: 2});
console.log(array);
そしてプリント:
[{a: 1, b: 2}, '0': {a: 1, b: 2}]
NodeVMセットアップのコンソールはinherit
設定されています。
この動作を生成する可能性のあるものについて何か手がかりがありますか?
よろしくお願いします。
このオブジェクトはプロキシであることが判明しました。 Decontextify.instanceのどこかで、間違ったオブジェクトが返されると思います。
ノードv8.9.3およびノードv8.10.0で期待される出力を生成します。
この問題はノードv10.14.2で確認されています
これと同じ問題に遭遇しました。 このバグを追跡するのはイライラします。自分のコードにあると思っていました。 最終的には非常に最小限の例を試してみることにしましたが、見よ、 vm2
が原因でした。 for of
ループも配列で奇妙なことをしているようです。
ノードv8.9.3およびノードv8.10.0で期待される出力を生成します。
この問題はノードv10.14.2で確認されています
私が提案できるのは、v.8.10.0とv10.14.2でデバッガーを実行し、出力が異なるコード行を見つけることです。
これは、Proxy.handler.ownKeys()トラップを使用したことが原因でした。 これはノードの問題であり、v12で修正されたようです。
古いバージョンのノードのフォールバックを計画していますか?
問題はノード10でのみ発生します。修正を行うことはできますが、そのたびに関数の呼び出し元を確認し、呼び出し元を取得するには、スタックトレースを生成する必要があります。 これをする価値はないと思います。
問題はノード10でのみ発生します。修正を行うことはできますが、そのたびに関数の呼び出し元を確認し、呼び出し元を取得するには、スタックトレースを生成する必要があります。 これをする価値はないと思います。
代わりに、構成またはCLIパラメーターのチェックはどうですか? そのためのコードはかなり最小限である可能性があります。
console
をvm._context
に追加しますvm._context.console = console
vm.run("console.log([1,2,3])")
正しく動作しています!
最も参考になるコメント
こんにちは@patriksimek 、私はあなたをメインメンテナとして引用します。 私もこの問題を抱えています。 これはVMとNodeVMで発生します。
私の場合、NodeVM内に、-とりわけ-これを行うスニペットがあります。
そしてプリント:
NodeVMセットアップのコンソールは
inherit
設定されています。この動作を生成する可能性のあるものについて何か手がかりがありますか?
よろしくお願いします。