Pour certains projets nous avons besoin d’exécuter plusieurs scripts ou commandes npm en simultané. On prend l’exemple d’un client JavaScript et d’un serveur Node.js qui ont besoin d’être lancées en même temps. Un autre exemple, la compilation de fichiers et le lancement d’un dev server à côté. Nous allons donc voir les différentes manières d’exécuter plusieurs scripts en parallèle.

Les chained commands en bash

Bash permet de d’exécuter plusieurs commandes en simultané via les chained commands. Il existe plusieurs opérateurs. On a l’opérateur && (l’opérateur ET ou AND) qui permet d’exécuter une suite de commandes. Il exécutera la deuxième commande uniquement si la première commande s’exécute correctement.

# command2 ne s'exécutera que si command1 s'exécute correctement
command1 && command2

On a aussi l’opérateur & (l’opérateur Esperluette ou Ampersand) qui permet d’exécuter les commandes données en arrière-plan. Il peut être utilisé pour exécuter plusieurs commandes à la fois. L’avantage de cet opérateur est qu’il ne nous laisse pas attendre jusqu’à ce que l’une des commandes données soit terminée.

# les deux commandes s'exécuteront en arrière plan
command1 & command2

On peut aussi utiliser wait avec l’opérateur &.

wait est une commande Unix intégrée qui attend la fin de tout processus en cours d’exécution. La commande d’attente est utilisée avec un ID de processus particulier. Lorsque plusieurs processus s’exécutent dans le shell, seul l’ID de processus de la dernière commande sera connu du shell actuel.

Si la commande wait est exécutée cette fois, elle sera appliquée pour la dernière commande. Si aucun ID de processus n’est donné, on attendra que tous les processus enfants en cours se terminent et retournent l’état de sortie.

command1 & command2 & wait

package.json

{
  ...
  "scripts": {
    "serve": "command1 & command2 & wait"
  },
  ...
}

Concurrently

Concurrently est un package npm qui permet d’exécuter plusieurs scripts en parallèle.

Installation

# installation en global
npm install -g concurrently

# installation en local sur le projet
npm install concurrently

Utilisation

concurrently "command1 arg" "command2 arg"

package.json

{
  ...
  "scripts": {
    "serve": "concurrently \"command1 arg\" \"command2 arg\""
  },
  ...
}

npm-run-all

npm-run-all est un package npm ou comme l’indique la documentation, un outil CLI qui permet d’exécuter plusieurs scripts en parallèle ou de manière séquentielle.

# installation en global
npm install -g npm-run-all

# installation en local sur le projet
npm install npm-run-all

Utilisation

# en séquentiel équivalent à command1 && command2
npm-run-all command1 command2

# en parellèle équivalent à command1 & command2
npm-run-all --parallel command1 command2

package.json

{
  ...
  "scripts": {
    "serve": "npm-run-all --parallel command1 command2",
    "command1": "echo \"command1 launched\"",
    "command2": "echo \"command2 launched\"",
  },
  ...
}

Avant de partir…
Merci pour votre lecture ! 😊