У меня есть код, который использует модуль vm
и runInNewContext
и выполняет динамически генерируемый код JavaScript. В основном более безопасный вариант eval
.
Код (переменная code
) может содержать синтаксические ошибки, поэтому я хотел бы их поймать и напечатать некоторую полезную информацию.
try {
vm.runInNewContext(code, sandbox, filename);
}
catch (e) {
if (e instanceof SyntaxError) { // always false
console.log(e.toString()); // "SyntaxError: Unexpected token ||" for example
console.log(e.line); // how to get the line number?
}
}
Я хочу напечатать номер строки с синтаксической ошибкой, но у меня две проблемы:
- Я не знаю, как узнать, является ли исключение
SyntaxError
или чем-то еще.instaceof
не работает (обновление - я могу использоватьe.name === "SyntaxError"
). - Даже если бы я смог узнать это, как мне получить номер строки? Возможно ли это?
Спасибо заранее.
Обновление: я могу получить некоторую информацию из e.stack
. Однако самый верхний вызов в трассировке стека runInNewContext
(с номером строки), но я все еще не могу найти номер строки внутри code
, который вызвал исключение (SyntaxError
).