Comment corriger l'erreur ReferenceError: primordials is not defined ?

L'outil gulp permet d'automatiser des tâches afin de gagner en efficacité et en productivité lorsque vous travaillez avec NodeJS. Si vous venez de mettre à jour NodeJS, vous pouvez alors obtenir ce message d'erreur en essayant d'utiliser gulp : "ReferenceError: primordials is not defined". Cette erreur est due à une incompatibilité entre une version de gulp et certaines de NodeJS.

En effet, la version 3 de gulp n'est pas compatible avec les versions 12 et suivantes de NodeJS. Pour résoudre ce problème, mettez à jour la librairie gulp pour utiliser la version 4. Le message d'erreur n'apparaîtra plus.

Si vous ne pouvez ou ne souhaitez pas mettre à jour gulp tout de suite, il existe d'autres solutions. Ce message d'erreur est dû à la librairie "graceful-fs", une librairie qui complète le module fs de node en ajoutant des fonctionnalités supplémentaires. Avant sa version 4, la librairie remplaçait totalement le module fs, mais c'est devenu impossible avec la version 12 de NodeJS. La librairie a modifié son fonctionnement avec sa version 4 pour être maintenant compatible avec les versions suivantes de NodeJS. Vous pouvez conserver gulp en version 3, mais utiliser une version plus récente de graceful-fs.

La modification à faire dépend du gestionnaire de paquets que vous utilisez. Yarn prend nativement en charge le fait de forcer la résolution d'une librairie avec une version spécifiée. Il faut ajouter dans votre fichier "package.json" la section "resolutions" :

{
  …
  "resolutions": {
    "graceful-fs": "^4.2.4"
  }
}

Si vous utilisez NPM, vous devez faire appel à un script extérieur pour ajouter cette fonctionnalité. Le script "npm-force-resolutions" a été développé dans ce but. Pour l'utiliser, il doit être ajouté dans les scripts spécifiés dans votre fichier "package.json", à la directive "preinstall". L'utilisation est ensuite identique aux résolutions de Yarn pour définir les librairies concernées avec leurs versions.

{
  …
  "scripts": {
    …
    "preinstall": "npx npm-force-resolutions"
  },
  "resolutions": {
    "graceful-fs": "^4.2.4"
  }
}

Vous disposerez ainsi de la librairie "graceful-fs" dans une version fonctionnelle avec les nouvelles versions de NodeJS et vous pourrez continuer à utiliser gulp dans sa version 3.

JavaScript