web-dev-qa-db-ja.com

Node REPLで複数行のコードを書く方法

評価したい

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

行ごとに評価する代わりに、ブロックとして

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

プロンプトを次の行に移動する簡単な方法はありますか?

39
user3812377

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

67
jhnstn

if(1){を使用して、}と入力するまで終了しないブロックを開始できます。ブロックの最後の行の値を出力します。

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

マルチラインモードでは、オートコンプリートや構文エラーの即時通知など、多くのREPLの利点を逃します。ブロック内の何らかの構文エラーのためにマルチラインモードでスタックする場合は、^Cは通常のプロンプトに戻ります。

19
Phssthpok

jhnstnのソリューションは完璧ですが、他の選択肢を探している場合は、複数行の文字列の中にコードを入れて、evalのようにできます:

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

もちろんこれはハックです;)

2
benjaminz

Node.js REPLはブロックをサポートし、ブロックから最後の式を返すことができるため、他のコンソール実装(Chrome devtoolsコンソール)も同様です。

これにより、構文エラーが発生する可能性がありますこれはNode 10.9.{をオブジェクトリテラルにすることができます。ブロックをブロックとして明確に評価することはできません。

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

これはブロックとして明確に評価でき、undefinedを返します:

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

ブロックの最後の式がログに記録されるため、console.logはここでは必要ありません。

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

これはブロックスコープなので、letconst、およびclassはREPLスコープに漏れません。この動作は望ましい場合があります。か否か。

0
Estus Flask

質問をよく理解できなかったのかもしれませんが、replのコンソールで複数行のコマンドを記述したい場合は、shift + enterを使用して次の行に移動できます。

0
Mihai Sabadac