Skip to content

Accepter les entrées depuis la ligne de commande dans Node.js

Comment rendre un programme CLI Node.js interactif ?

Node.js, depuis la version 7, fournit le module readline pour effectuer exactement cela : obtenir des entrées depuis un flux lisible tel que le flux process.stdin, qui, lors de l’exécution d’un programme Node.js, est l’entrée du terminal, ligne par ligne.

javascript
const readline = require('node:readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
rl.question("What's your name?", name => {
    console.log('Hi ' + name + '!');
    rl.close();
});

Ce bout de code demande le nom de l’utilisateur, et une fois le texte saisi et la touche Entrée pressée, nous envoyons une salutation.

La méthode question() affiche le premier paramètre (une question) et attend l’entrée de l’utilisateur. Elle appelle la fonction de rappel une fois la touche Entrée pressée.

Dans cette fonction de rappel, nous fermons l’interface readline.

readline offre plusieurs autres méthodes, veuillez les consulter dans la documentation du package liée ci-dessus.

Si vous avez besoin de demander un mot de passe, il est préférable de ne pas l’afficher, mais plutôt d’afficher un symbole *.

La façon la plus simple est d’utiliser le package readline-sync qui est très similaire en termes d’API et gère cela directement. Une solution plus complète et abstraite est fournie par le package Inquirer.js.

Vous pouvez l’installer en utilisant npm install inquirer, et vous pouvez ensuite reproduire le code ci-dessus comme ceci :

javascript
const inquirer = require('inquirer');
const questions = [
    {
        type: 'input',
        name: 'name',
        message: "what's your name?"
    }
];
inquirer.prompt(questions).then(answers => {
    console.log('Hi ' + answers.name + '!');
});

Inquirer.js vous permet de faire beaucoup de choses comme poser des choix multiples, avoir des boutons radio, des confirmations, et plus encore.

Il est utile de connaître toutes les alternatives, en particulier celles intégrées fournies par Node.js, mais si vous envisagez de faire passer l’entrée CLI au niveau supérieur, Inquirer.js est un choix optimal.