Как написать несколько строк кода в Node REPL
Я хотел бы оценить
var foo = "foo";
console.log(foo);
как блок, вместо оценки построчно
var foo = "foo";
undefined
console.log(foo);
foo
undefined
Есть ли простой способ переместить подсказку на следующую строку?
6 ответов
Узел v6.4 имеет editor
Режим. В ответ на приглашение типа repl .editor
и вы можете ввести несколько строк.
пример
$ node
> .editor
// Entering editor mode (^D to finish, ^C to cancel)
const fn = there => `why hello ${there}`;
fn('multiline');
// hit ^D
'why hello multiline'
> // 'block' gets evaluated and back in single line mode.
Вот документы по всем специальным командам repl https://nodejs.org/api/repl.html
Ты можешь использовать if(1){
начать блок, который не закончится, пока вы не введете }
, Он напечатает значение последней строки блока.
> {
... var foo = "foo";
... console.log(foo);
... }
foo
undefined
В многострочном режиме вы упускаете множество возможностей REPL, таких как автозаполнение и немедленное уведомление о синтаксических ошибках. Если вы застряли в многострочном режиме из-за некоторой синтаксической ошибки в блоке, используйте ^C
вернуться к обычной подсказке.
Решение jhnstn идеально, но если вы ищете другие альтернативы, вы можете поместить код в многострочную строку, а затем eval
это так
> let myLongCode = `
... let a = 1;
... let b = 2;
... console.log(a + b);
... `;
> eval(myLongCode)
> 3
Конечно это взломать;)
Возможно, я не очень хорошо понял вопрос, но если вы хотите написать многострочную команду в консоли repl, вы можете использовать shift+enter, чтобы перейти к следующим строкам.
Node.js REPL поддерживает блоки и может возвращать последнее выражение из блока, как и некоторые другие реализации консоли (консоль Chrome devtools).
Это может привести к синтаксической ошибке, это критическое изменение в Узле 10.9.0. {
может быть литералом объекта, блок не может быть однозначно оценен как блок:
{
var foo = "foo";
console.log(foo);
}
Хотя это можно однозначно оценить как блок и вернет undefined
:
;{
var foo = "foo";
console.log(foo);
}
Так как последнее выражение из блока записывается в журнал, console.log
здесь не нужно:
;{
var foo = "foo";
foo;
}
Обратите внимание, что это область видимости блока, поэтому let
, const
а также class
не попадет в область REPL, такое поведение может быть желательным или нет.
Вы также можете использовать некоторые приложения, такие как runjs, если вы не настаиваете на использовании repl узла и просто хотите попробовать что-то в node.js и javascript в целом.