Как написать несколько строк кода в Node REPL
Я хотел бы оценить
var foo = "foo";
console.log(foo);
в качестве блока вместо оценки строки за строкой
var foo = "foo";
undefined
console.log(foo);
foo
undefined
Есть ли простой способ переместить приглашение на следующую строку?
Ответы
Ответ 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, чтобы перейти к следующим строкам.