Rant: En 2020 les import/export ESM sont toujours cassés dans le monde de node

Posted by: Marie

Rant: En 2020 les import/export ESM sont toujours cassés dans le monde de node

Ce post est un petit rant sur les imports es6 et la galère à les utiliser.

Tout le monde le sait aujourd’hui, ES6 a introduit une nouvelle syntaxe pour les imports et exports: les esm pour ecmascript modules. Quelques années plus tard nodejs les a intégré, d’abord en expérimental via l’argument --experimental-modules, puis via les fichiers d’extension mjs ou le "type": "module" dans le package.json. Si vous ne connaissez pas les imports esm dans nodejs rendez-vous ici => https://nodejs.org/api/esm.html

<Rant>
En 2020 c'est toujours une galère d'intégrer et d'utiliser les modules `esm`.
</Rant>

Si vous lancer un nouveau projet nodejs et que vous vous posez la question, d’utiliser la syntaxe esm, mon conseil est le suivant : Ne faites surtout pas ça !

Je précise : ne faites surtout pas ça si vous n’utilisez pas Babel pour transpiler votre code.

Si vous utilisez Babel, vos imports vont être transpilés en require, donc l’utilité de la syntaxe es6 sera principalement de la lisibilité.

Pourquoi les imports esm c’est dangereux

  • Les imports esm dynamiques sont asynchrones : il faudra re-écrire votre code, si vous chargez des fichier dynamiquement (des locales json par exemple)
  • Il n’est pas possible de mélanger import et require
  • Utiliser pose beaucoup de problèmes si votre code va interagir avec d’autres outils : eslint, mocha, jest posent quelques soucis si vos fichiers sont en mjs et encore plus si vous avez utilisé le type: "module" dans votre package.json

Pourquoi le type : module c’est le mal

En plus de tous les points ci-dessus,

  • Faire un require dans un projet de type module ne fonctionne pas et pose des problèmes énormes
  • Les librairies externes ne fonctionneront pas si elles ne prennent pas soin de vérifier le type de projet dans votre package.json
  • Si votre code va servir de librairie à une autre projet, cela va poser des soucis.
  • jest et sequelize-cli ne savent pas fonctionner avec le type: "modules"

Voila vous êtes prévenus.

Laisser un commentaire