Qu'est-ce qu'un 'type: module' dans un fichier package.json ?

Le module est une notion de programmation avancée utilisée dans beaucoup de langages. Elle consiste à regrouper plusieurs fichiers qui vont être alors une partie séparée d'une application. Cela permet de découper davantage le code d'un gros projet et de bien séparer la logique. Cette notion, similaire à celle des espaces de noms dans d'autres langages (Java et PHP par exemple) est indispensable pour pouvoir bien organiser son code. Dans le langage JavaScript, ce sont d'abord les librairies externes qui ont apporté cette notion avant qu'elle soit intégrée dans le langage nativement. C'est cette différence entre les modules des librairies et ceux du langage qui aboutissent à l'ajout de la ligne "type: module" dans le fichier "package.json" lorsque l'on utilise NodeJS.

NodeJS a été l'un des premiers outils à permettre l'utilisation de modules. Il s'agit des modules CommonJS. Le langage JavaScript a créé sa propre notion de modules, les modules ESM, qui sont apparus avec la version ECMA v6 du langage. Ces deux types de modules ne sont pas compatibles entre eux. Lorsque vous utilisez NodeJS, vous devez impérativement ajouter la ligne suivante pour que votre serveur comprenne que vous allez utiliser des modules ESM, qui s'utilisent avec les directives "import" et "export".

"type": "module"

Si vous ne le faites pas, NodeJS pense alors que c'est un module CommonJS, que l'on utilise avec la directive "require".

La prise en charge des modules ESM par NodeJS est sortie lors de la version 16. Si vous utilisez une version plus ancienne, comme NodeJS 14, il est quand même possible d'utiliser les modules ESM, mais de manière expérimentale. Vous devez bien ajouter la ligne dans le fichier de configuration "package.json", mais en plus utiliser l'argument "--experimental-modules" lors du lancement de votre programme.

node --experimental-modules app.js

JavaScript