Comment corriger l'erreur : "require() of ES modules is not supported" lors de l'import de node-fetch

Il existe de nombreuses librairies qui fonctionnent avec NodeJS. Elles apportent toutes des fonctionnalités supplémentaires. Certaines d'entre elles apportent des fonctionnalités que l'on retrouve dans le langage JavaScript sur les navigateurs. C'est par exemple le cas de la librairie "node-fetch". Elle vous permet d'utiliser dans votre code la méthode "windows.fetch()". Cette méthode permet d'effectuer des appels HTTP de manière asynchrone avec une syntaxe moderne et d'utiliser les "promesses", une fonctionnalité du langage. Si, lorsque vous développez un code avec la librairie "node-fetch", vous rencontrez le message d'erreur "require() of ES modules is not supported", cela signifie que vous devez mettre à jour votre code.

Depuis la version 3 de la librairie, "node-fetch" est uniquement un module ESM. Dans les versions 2 et antérieures, on utilisait le mot-clé "require" pour appeler la librairie car elle fonctionnait grâce à CommonJS, un projet permettant de créer des "modules" en JavaScript. Cette fonctionnalité a directement été intégrée dans le langage JavaScript, avec les modules ESM. Cependant, la syntaxe n'est pas la même. Vous devez d'abord indiquer dans le fichier "packages.json" qu'il s'agit d'un module ESM, en ajoutant la ligne suivante dans les informations du paquet :

{
    "type": "module"
}

Une fois que c'est fait, vous devez modifier la directive d'import de la librairie. Il faut utiliser la fonction "import" à la place de la fonction "require".

// À partir de la version 3 de "node-fetch"
import fetch from "node-fetch";
// Versions 2 et antérieures
import { fetch } from "node-fetch";

Si vous souhaitez continuer à utiliser la syntaxe avec la fonction "require", vous devez utiliser d'autres librairies. Les librairies "Axios" ou "Got" sont également des librairies proposant un client HTTP, mais peuvent être appelées dans votre code avec la fonction "require".

JavaScript