如何在Node REPL中编写多行代码

时间:2015-03-23 05:39:54

标签: node.js command-prompt read-eval-print-loop node-repl

我想评估

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

作为一个块,而不是逐行评估

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

有没有一种简单的方法可以将提示移动到下一行?

5 个答案:

答案 0 :(得分:66)

节点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

答案 1 :(得分:19)

您可以使用if(1){启动一个在您输入}之前无法完成的块。它将打印块的最后一行的值。

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

在多线模式下,您会错过许多REPL细节,例如自动完成和语法错误的即时通知。如果由于块内存在某些语法错误而陷入多线模式,请使用^C返回正常提示。

答案 2 :(得分:2)

jhnstn的解决方案是完美的,但如果您正在寻找其他替代方案,您可以将代码放在多行字符串中,然后eval就像这样:

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

当然这是一个黑客;)

答案 3 :(得分:0)

Node.js REPL支持块,并且能够从块返回最后一个表达式,其他一些控制台实现(Chrome devtools控制台)也是如此。

这可能会导致语法错误,这是Node 10.9.0中的重大更改{可以是对象文字,不能将一个块明确地评估为一个块:

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

虽然可以明确地将其评估为一个块,并且将返回undefined

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

由于记录了块中的最后一个表达式,因此这里不需要console.log

;{
var foo = "foo";
foo;
}

请注意,这是块作用域,因此letconstclass不会泄漏到REPL作用域,此行为是否可取。

答案 4 :(得分:0)

也许我不太了解这个问题,但是如果您想在repl的控制台中编写多行命令,则可以使用shift + enter移至下一行。