評価したい
var foo = "foo";
console.log(foo);
行ごとに評価する代わりに、ブロックとして
var foo = "foo";
undefined
console.log(foo);
foo
undefined
プロンプトを次の行に移動する簡単な方法はありますか?
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
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
もちろんこれはハックです;)
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;
}
これはブロックスコープなので、let
、const
、およびclass
はREPLスコープに漏れません。この動作は望ましい場合があります。か否か。
質問をよく理解できなかったのかもしれませんが、replのコンソールで複数行のコマンドを記述したい場合は、shift + enterを使用して次の行に移動できます。