Comment résoudre l'erreur Node.js "SyntaxError: Cannot use import statement outside a module" ?
L'utilisation du langage JavaScript a explosé ces dernières années. Alors qu'au départ le langage était pensé pour ajouter des interactions et des animations à une page web, on peut maintenant quasiment tout faire avec. L'arrivée de NodeJS, de frameworks et de librairies populaires a rendu possible le fait de créer entièrement son site internet avec le langage. L'outil Electron permet quant à lui d'utiliser du JavaScript pour créer une application de bureau, une utilisation très éloignée de son premier but. Le nombre de fichiers JS dans une application a explosé et, pour faciliter la vie des développeurs, la notion de module est apparue. Il existe différents types de modules et c'est ce mélange entre les types de modules qui peut provoquer l'affichage du message d'erreur "SyntaxError: Cannot use import statement outside a module".
Cette erreur peut s'afficher dans votre application NodeJS si vous utilisez les directives "import" et "export" dans un module, mais que NodeJS n'est pas configuré pour les utiliser. NodeJS a popularisé le concept de module avec les modules CommonJS. Cette notion de module a été reprise dans le langage JavaScript, avec les modules ESM. Ce sont ces modules qui utilisent les directives "import" et "export". Malheureusement, les modules CommonJS et ESM ne sont pas compatibles entre eux. Si vous utilisez les modules ESM, vous devez configurer NodeJS, sinon vous obtenez le message d'erreur "SyntaxError: Cannot use import statement outside a module". Vous devez d'abord vous assurer d'utiliser au moins la version 14 de NodeJS. Ensuite, vous devez ajouter la directive suivante pour votre module dans le fichier de configuration "package.json".
"type": "module"
Si vous travaillez avec le module "node-fetch", vous pouvez également obtenir le message d'erreur si vous travaillez avec des modules CommonJS et que vous utilisez la version 3 ou une version plus récente. À partir de la version 3, la librairie "node-fetch" n'utilise plus que des modules ESM, elle ne fonctionne plus avec les modules CommonJS. Si vous avez besoin de travailler avec des modules CommonJS, vous devez installer spécifiquement la version 2 de la librairie. Utilisez pour cela la commande suivante :
npm install node-fetch@2