Vm2: Das Ausführen eines Arrays gibt ein seltsames Objekt zurück. [Node.js 10.xx]

Erstellt am 7. Apr. 2019  ·  10Kommentare  ·  Quelle: patriksimek/vm2

Code wie folgt:

const { VM } = require('vm2')
const vm = new VM()
const res = vm.run('[1, 2, 3]')
console.log(res)

Drucke:
[ 1, 2, 3, '0': 1, '1': 2, '2': 3 ]
Ist das ein Fehler oder ein erwartetes Verhalten?

Die in NodeJS integrierte VM gibt Folgendes zurück:
[1, 2, 3]
wie erwartet.

bug confirmed help wanted wontfix

Hilfreichster Kommentar

Hallo @patriksimek , ich zitiere Sie als Hauptbetreuer. Ich habe auch dieses Problem. Dies geschieht mit VM und mit NodeVM.

In meinem Fall habe ich in der NodeVM einen Ausschnitt, der - unter anderem - Folgendes tut:

const array = [];
array.push({a: 1, b: 2});
console.log(array);

Und druckt:

[{a: 1, b: 2}, '0': {a: 1, b: 2}]

Die Konsole im NodeVM-Setup ist auf inherit .

Haben Sie eine Ahnung, was dieses Verhalten hervorrufen könnte?

Vielen Dank im Voraus und entschuldigen Sie die Mühe.

Alle 10 Kommentare

Hallo @patriksimek , ich zitiere Sie als Hauptbetreuer. Ich habe auch dieses Problem. Dies geschieht mit VM und mit NodeVM.

In meinem Fall habe ich in der NodeVM einen Ausschnitt, der - unter anderem - Folgendes tut:

const array = [];
array.push({a: 1, b: 2});
console.log(array);

Und druckt:

[{a: 1, b: 2}, '0': {a: 1, b: 2}]

Die Konsole im NodeVM-Setup ist auf inherit .

Haben Sie eine Ahnung, was dieses Verhalten hervorrufen könnte?

Vielen Dank im Voraus und entschuldigen Sie die Mühe.

Dieses Objekt stellte sich als Proxy heraus. Ich glaube, dass irgendwo in Decontextify.instance ein falsches Objekt zurückgegeben wird.

Erzeugt die erwartete Ausgabe unter Knoten v8.9.3 und Knoten v8.10.0.
Das Problem wird unter Knoten 10.14.2 bestätigt

Bin auf dasselbe Problem gestoßen. Es ist frustrierend, diesen Fehler aufzuspüren und zu denken, dass er in meinem eigenen Code enthalten ist. Schließlich entschied man sich, ein sehr minimales Beispiel zu versuchen und siehe da, vm2 war der Schuldige. Es scheint, dass die for of -Schleife auch einige seltsame Dinge mit Arrays macht.

Erzeugt die erwartete Ausgabe unter Knoten v8.9.3 und Knoten v8.10.0.
Das Problem wird unter Knoten 10.14.2 bestätigt

Was ich vorschlagen kann, ist, einen Debugger in Version 8.10.0 und Version 10.14.2 auszuführen und eine Codezeile zu finden, in der die Ausgabe unterschiedlich ist.

Dies wurde durch die Verwendung eines Proxy.handler.ownKeys () - Traps verursacht. Dies war ein Problem im Knoten und scheint in Version 12 behoben zu sein.

Planen Sie einen Fallback für ältere Versionen von Node?

Das Problem liegt nur auf Knoten 10. Wir könnten eine Korrektur durchführen, aber dazu müsste der Aufrufer einer Funktion jedes Mal überprüft werden, und um den Aufrufer zu erhalten, müssten wir einen Stack-Trace generieren. Ich denke, dass es sich nicht lohnt, dies zu tun.

Das Problem liegt nur auf Knoten 10. Wir könnten eine Korrektur durchführen, aber dazu müsste der Aufrufer einer Funktion jedes Mal überprüft werden, und um den Aufrufer zu erhalten, müssten wir einen Stack-Trace generieren. Ich denke, dass es sich nicht lohnt, dies zu tun.

Was ist stattdessen mit einer Konfigurations- oder CLI-Parameterprüfung? Der Code dafür könnte ziemlich minimal sein.

Ich füge console zu vm._context
vm._context.console = console
vm.run("console.log([1,2,3])")
es funktioniert richtig!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

seanc picture seanc  ·  3Kommentare

ghost picture ghost  ·  23Kommentare

wintertime-inc picture wintertime-inc  ·  5Kommentare

CapacitorSet picture CapacitorSet  ·  13Kommentare

XmiliaH picture XmiliaH  ·  19Kommentare