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

70

我想进行评估。

var foo = "foo";
console.log(foo);
作为一个整体,而不是逐行评估。
var foo = "foo";
undefined
console.log(foo);
foo
undefined

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


1
如果存在语法错误,no. repl会自动启动“多行模式”(multiline mode),并在表达式有效时退出该模式。为什么逐行输入不够好?您仍然可以粘贴多行输入,并且来自粘贴文本的所有行都将被评估。 - Andrey Sidorov
当我在REPL中编写一个小代码块时,逐行评估会让我分心。 - aksanoble
或者,您可以在Chrome中使用Node调试功能。我猜您可以在开发人员控制台中输入多行文本,这将作为Node repl。 - Rolf
6个回答

130

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


特别命令的链接会获得额外的积分。谢谢! - Xunnamius

26
你可以使用 if(1){ 来开始一个不会结束的块直到你输入 }。它将打印块中最后一行的值。

你可以使用if(1){来开始一个不会结束的块,直到您输入}。它将打印块中最后一行的值。

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

在多行模式下,您会错过很多REPL的小巧思,例如自动完成和立即通知语法错误。如果由于块内的某些语法错误而卡住了多行模式,请使用 ^C 返回到正常提示符。


不起作用(我认为“{”被解释为对象的开始)。如果第一行是if(1) {,它就能工作。 - Andrey Sidorov
好的发现。我不知道为什么从其他起始点(如()恢复如此困难。 - Phssthpok
注意事项:如果您复制/粘贴像上面那样包含制表符的代码块,制表符将触发节点的自动完成(可能不是您想要的),并且很可能会导致节点退出。 - Jthorpe
1
@AndreySidorov,只使用大括号(即没有“if(1)”)的版本对我有效,在Node版本6.9.1上可以运行。 - Venryx

4

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

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

当然,这是一种“黑客”方法 ;)

1
也许我没有理解问题,但如果您想在repl的控制台中编写多行命令,可以使用shift+enter换行。

1
我指的是 Node 控制台而不是浏览器控制台。 - aksanoble

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作用域,这种行为可能是可取的,也可能不是。

0

如果您不坚持使用Node REPL,只是想在Node.js和JavaScript中尝试一些东西,您也可以使用一些应用程序,例如runjs。

https://runjs.app/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接