Comment utiliser le REPL en Node.js

Qu'est-ce que le REPL ou l'exécution de Node.js dans un invité de commande et comment l'utiliser ? Une traduction de l'article How do I use node's REPL?

Classé dans REPL

Traduction

Apprendre à utiliser le REPL

Node.js est livré avec une Boucle de Lecture-Évaluation-Impression (Read-Eval-Print Loop), également connue sous le nom de REPL. C'est l'invité de commande interactif de Node.js ; tout JavaScript valide qui peut être écrit dans un script peut être passé au REPL. Il peut être extrêmement utile pour expérimenter avec Node.js, déboguer du code et comprendre certains des comportements les plus excentriques de JavaScript.

Node.js dispose d'un REPL autonome accessible depuis la ligne de commande, et d'un module REPL intégré que vous pouvez utiliser pour créer vos propres REPL personnalisés. Nous allons apprendre les bases du REPL autonome.

Comment démarrer le REPL

Le lancement du REPL est simple ; il suffit d'exécuter node dans l'invité de commande sans utiliser de nom de fichier.

node

Il vous place ensuite dans une simple invite ('>') où vous pouvez taper n'importe quelle commande JavaScript que vous souhaitez. Comme dans la plupart des interpréteurs de commandes, vous pouvez appuyer sur les touches fléchées haut et bas pour faire défiler l'historique de vos commandes et modifier les commandes précédentes.

$ node
> var x = "Hello, World!"
undefined
> x
"Hello, World!"
> .exit

Vous pouvez également utiliser la touche Tab pour compléter automatiquement certaines commandes. Lorsque plusieurs options de complétion automatique sont disponibles, appuyez à nouveau sur la touche Tab pour les faire défiler.

Commandes spéciales et sortie du REPL

Les commandes spéciales suivantes sont prises en charge par toutes les instances REPL (d'après la documentation REPL de Node.js (EN)) :

  • .exit : ferme le flux d'entrée/sortie ou E/S (I/O), ce qui entraîne la sortie du REPL.
  • .break : lors de la saisie d'une expression multilignes, l'entrée de la commande .break (ou l'appui sur la combinaison de touches <ctrl>-C) interrompt la saisie ou le traitement de cette expression.
  • .clear : réinitialise le contexte REPL à un objet vide et efface toute expression multiligne en cours de saisie.
  • .help : affiche cette liste de commandes spéciales.
  • .save : enregistre la session REPL actuelle dans un fichier : > .save ./file/to/save.js.
  • .load : charge un fichier dans la session REPL actuelle : > .load ./file/to/load.js.
  • .editor : accéder au mode éditeur (<ctrl>-D pour terminer, <ctrl>-C pour annuler).
> .editor
# Entrée dans le mode éditeur (`<ctrl>-D` pour terminer, `<ctrl>-C` pour annuler)
function welcome(name) {
  return `Salut ${name} !`;
}

welcome('utilisateur Node.js');

# <ctrl>-D
'Salut utilisateur Node.js !'
>

Les combinaisons de touches suivantes dans le REPL ont ces effets spéciaux :

  • <ctrl>-C : lorsqu'elle est pressée une fois, a le même effet que la commande .break. Lorsqu'elle est pressée deux fois sur une ligne blanche, a le même effet que la commande .exit.
  • <ctrl>-D : à le même effet que la commande .exit.
  • <tab> : lorsque vous appuyez sur cette touche sur une ligne vide, affiche les variables globales et locales de la portée (scope). Lorsqu'on appuie dessus pendant la saisie d'autres entrées, affiche les options d'autocomplétion pertinentes.

Valeurs de retour

Chaque fois que vous tapez une commande, la valeur de retour de la commande est imprimée. Si vous voulez réutiliser la valeur de retour précédente, vous pouvez utiliser la variable spéciale _.

Par exemple :

$ node
> 1+1
2
> _+1
3

Une chose à noter concernant les valeurs de retour REPL :

> x = 10
10
> var y = 5
> x
10
> y
5

Lorsque le mot-clé var est utilisé, la valeur de l'expression est stockée, mais PAS retournée. Lorsqu'un identificateur nu est utilisé, la valeur est également renvoyée et stockée.

Accéder aux modules

Si vous avez besoin d'accéder à l'un des modules intégrés, ou à tout autre module tiers, vous pouvez y accéder avec require, tout comme dans le reste de Node.js.

Par exemple :

$ node
> path = require('path')
{ resolve: [Function],
  normalize: [Function],
  join: [Function],
  dirname: [Function],
  basename: [Function],
  extname: [Function],
  exists: [Function],
  existsSync: [Function] }
> path.basename("/a/b/c.txt")
'c.txt'

Notez une fois de plus que sans le mot clé var, le contenu de l'objet est retourné immédiatement et affiché sur stdout.

Lire dans une autre langue