How to write multiple lines of code in Node REPL

孤者浪人 提交于 2019-11-28 20:51:02

问题


I would like to evaluate

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

as a block, instead of evaluating line by line

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

Is there a simple way to move the prompt to the next line?


回答1:


Node v6.4 has an editor mode. At the repl prompt type .editor and you can input multiple lines.

example

$ 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.

Here are the docs on all the special repl commands https://nodejs.org/api/repl.html#repl_commands_and_special_keys




回答2:


You can use if(1){ to start a block that will not finish until you enter }. It will print the value of the last line of the block.

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

In multiline mode you miss out on a lot of REPL niceties such as autocompletion and immediate notification of syntax errors. If you get stuck in multiline mode due to some syntax error within the block, use ^C to return to the normal prompt.




回答3:


jhnstn's solution is perfect, but in case you are looking for other alternatives, you can put the code inside a multiline string and then eval it like so:

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

Of course this is a hack ;)




回答4:


Node.js REPL supports blocks and is able to return the last expression from a block, so do some other console implementations (Chrome devtools console).

This may result in syntax error, this is a breaking change in Node 10.9.0. { could be a object literal, a block cannot be unambiguously evaluated as a block:

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

While this can be unambiguously evaluated as a block and will return undefined:

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

Since the last expression from a block is logged, console.log isn't needed here:

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

Notice that this is block scope, so let, const and class won't leak to REPL scope, this behaviour can be desirable or not.




回答5:


Maybe I didn't understand the question well, but if you want to write multiline command in the console of the repl, you can use shift+enter to move to the next lines.



来源:https://stackoverflow.com/questions/29203892/how-to-write-multiple-lines-of-code-in-node-repl

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!