Как написать несколько строк кода в 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 в целом.

https://runjs.app/

Другие вопросы по тегам