Подтвердить что ты не робот

Как написать несколько строк кода в Node REPL

Я хотел бы оценить

var foo = "foo";
console.log(foo);

в качестве блока вместо оценки строки за строкой

var foo = "foo";
undefined
console.log(foo);
foo
undefined

Есть ли простой способ переместить приглашение на следующую строку?

4b9b3361

Ответ 1

Node 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#repl_commands_and_special_keys

Ответ 2

Вы можете использовать if(1){ для запуска блока, который не будет завершен, пока вы не введете }. Он напечатает значение последней строки блока.

> {
... var foo = "foo";
... console.log(foo);
... }
foo
undefined

В многострочном режиме вы пропускаете множество тонкостей REPL, таких как автозаполнение и немедленное уведомление о синтаксических ошибках. Если вы застряли в многострочном режиме из-за некоторой синтаксической ошибки в блоке, используйте ^C, чтобы вернуться к нормальному запросу.

Ответ 3

Решение jhnstn идеально, но если вы ищете другие альтернативы, вы можете поместить код в многострочную строку, а затем eval его следующим образом:

> let myLongCode = '
... let a = 1;
... let b = 2;
... console.log(a + b);
... ';
> eval(myLongCode)
> 3

Конечно это взломать;)

Ответ 4

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, такое поведение может быть желательным или нет.

Ответ 5

Возможно, я не очень хорошо понял вопрос, но если вы хотите написать многострочную команду в консоли repl, вы можете использовать shift + enter, чтобы перейти к следующим строкам.