Vm2: Выполнение массива возвращает странный объект. [Node.js 10.xx]

Созданный на 7 апр. 2019  ·  10Комментарии  ·  Источник: patriksimek/vm2

Код вроде этого:

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 в виртуальной машине возвращает:
[1, 2, 3]
как и ожидалось.

bug confirmed help wanted wontfix

Самый полезный комментарий

Привет @patriksimek , цитирую вас как главного сопровождающего. У меня тоже есть эта проблема. Это происходит с виртуальной машиной и с NodeVM.

В моем случае внутри NodeVM у меня есть фрагмент, который, помимо прочего, делает следующее:

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

И печатает:

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

Консоль в настройке NodeVM установлена ​​на inherit .

Есть ли у вас какие-нибудь представления о том, что может вызвать такое поведение?

Заранее спасибо и извините за беспокойство.

Все 10 Комментарий

Привет @patriksimek , цитирую вас как главного сопровождающего. У меня тоже есть эта проблема. Это происходит с виртуальной машиной и с 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 и node v8.10.0.
Проблема подтверждается на узле v10.14.2.

Попался в эту же проблему. Было неприятно отслеживать эту ошибку, думая, что она была в моем собственном коде. В конце концов решил попробовать очень простой пример, и вот, виноват vm2 . Похоже, что цикл for of также делает некоторые странные вещи с массивами.

Производит ожидаемый результат в узлах v8.9.3 и node v8.10.0.
Проблема подтверждается на узле v10.14.2.

Я могу предложить запустить отладчик в версиях 8.10.0 и 10.14.2 и найти строку кода, вывод которой отличается.

Это было вызвано использованием ловушки Proxy.handler.ownKeys (). Это была проблема в узле и, похоже, исправлена ​​в версии 12.

Планируете ли вы возврат к более старым версиям узла?

Проблема только в узле 10. Мы могли бы исправить, но это потребовало бы каждый раз проверять вызывающий объект функции и чтобы получить вызывающего, нам нужно было бы сгенерировать трассировку стека. Я считаю, что этого делать не стоит.

Проблема только в узле 10. Мы могли бы исправить, но это потребовало бы каждый раз проверять вызывающий объект функции и чтобы получить вызывающего, нам нужно было бы сгенерировать трассировку стека. Я считаю, что этого делать не стоит.

А как насчет проверки параметров конфигурации или интерфейса командной строки? Код для этого может быть довольно минимальным.

Я добавляю console к vm._context
vm._context.console = console
vm.run("console.log([1,2,3])")
работает правильно!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

seanc picture seanc  ·  3Комментарии

vshymanskyy picture vshymanskyy  ·  8Комментарии

ghost picture ghost  ·  23Комментарии

patriksimek picture patriksimek  ·  15Комментарии

keyosk picture keyosk  ·  64Комментарии