Je voudrais évaluer
var foo = "foo";
console.log(foo);
en bloc, au lieu d'évaluer ligne par ligne
var foo = "foo";
undefined
console.log(foo);
foo
undefined
Existe-t-il un moyen simple de déplacer l'invite à la ligne suivante?
Le noeud v6.4 a un mode editor
. À l'invite de réponse, tapez .editor
et vous pouvez entrer plusieurs lignes.
exemple
$ 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.
Voici la documentation de toutes les commandes spéciales de réplication https://nodejs.org/api/repl.html#repl_commands_and_special_keys
Vous pouvez utiliser if(1){
pour démarrer un bloc qui ne se terminera pas tant que vous n’aurez pas entré }
. Cela affichera la valeur de la dernière ligne du bloc.
> {
... var foo = "foo";
... console.log(foo);
... }
foo
undefined
En mode multiligne, vous manquez beaucoup de REPL subtilités telles que l'auto-complétion et la notification immédiate des erreurs de syntaxe. Si vous êtes bloqué en mode multiligne en raison d'une erreur de syntaxe dans le bloc, utilisez ^C
pour revenir à l'invite normale.
la solution de jhnstn est parfaite, mais si vous recherchez d'autres alternatives, vous pouvez insérer le code dans une chaîne multiligne, puis eval
comme suit:
> let myLongCode = `
... let a = 1;
... let b = 2;
... console.log(a + b);
... `;
> eval(myLongCode)
> 3
Bien sûr c'est un bidouillage;)
Node.js REPL prend en charge les blocs et peut renvoyer la dernière expression d'un bloc. Il en va de même pour d'autres implémentations de console (console devtools de Chrome).
Cela peut entraîner une erreur de syntaxe, il s'agit d'un changement radical dans le noeud 10.9.0 . {
pourrait être un littéral d'objet, un bloc ne peut pas être évalué sans ambiguïté comme un bloc:
{
var foo = "foo";
console.log(foo);
}
Bien que cela puisse être évalué sans équivoque en tant que bloc, il retournera undefined
:
;{
var foo = "foo";
console.log(foo);
}
Puisque la dernière expression d'un bloc est consignée, console.log
n'est pas nécessaire ici:
;{
var foo = "foo";
foo;
}
Notez qu'il s'agit d'une étendue de bloc. Ainsi, let
, const
et class
ne fuiront pas vers REPL, ce comportement peut être souhaitable ou non.
Je n’ai peut-être pas bien compris la question, mais si vous voulez écrire une commande multiligne dans la console de la répl, vous pouvez utiliser les touches Maj + Entrée pour passer aux lignes suivantes.