883 votes

Comment corriger "ReferenceError : primordials is not defined" en Node.js

J'ai installé les modules Node.js par 'npm install', puis j'ai essayé de faire ce qui suit gulp sass-watch dans une invite de commande. Après cela, j'ai obtenu la réponse ci-dessous.

[18:18:32] Requiring external module babel-register
fs.js:27
const { Math, Object, Reflect } = primordials;
                                  ^

ReferenceError: primordials is not defined

J'ai déjà essayé ceci gulp sass-watch :

npm -g install gulp-cli

0 votes

Désinstaller le nœud et le réinstaller en utilisant le lien donné. nodejs.org/fr/download

0 votes

47voto

Lehtis Points 47

Pour moi, Réponse de Diego Fortes fonctionne avec un petit changement.

Voici mon flux de travail si cette erreur apparaît :

  1. npm install

  2. npm install gulp

  3. créer un fichier npm-shrinkwrap.json avec

    {
      "dependencies": {
        "graceful-fs": {
            "version": "4.2.2"
         }
      }
    }
  4. npm install (encore) (Pas npm install gulp encore ! Très important - sinon l'erreur reviendra)

  5. gulp (fonctionne maintenant)

32voto

kevnk Points 7212

Utilisation de NVM pour gérer la version de Node.js que vous utilisez, l'exécution des commandes suivantes a fonctionné pour moi :

cd /to/your/project/
nvm install lts/dubnium
nvm use lts/dubnium
yarn upgrade # or `npm install`

28voto

Aymen Yaseen Points 333

Gulp 3.9.1 ne fonctionne pas avec Node v12.x.x, et si vous mettez à jour vers Gulp 4.0.2, vous devez changer complètement gulpfile.js avec la nouvelle syntaxe (séries et parallèles). Donc votre meilleure chance est de passer à Node.js v 11.x.x (la version 11.15.0 a bien fonctionné pour moi) en utilisant simplement le code suivant dans un terminal :

nvm install 11.15.0
nvm use 11.15.0 # Just in case it didn't automatically select the 11.15.0 as the main node.
nvm uninstall 13.1.0
npm rebuild node-sass

28voto

Oliver Points 660

TL:DR

Gulp 3.* ne fonctionne pas sur Node.js 12.* ou plus. Vous devez mettre à jour Node.js, ou mettre à jour Gulp.

Si vous manquez de temps, passez à la version 11.* de Node.js ou à une version inférieure ; si vous avez besoin de fonctionnalités plus récentes et que vous avez le temps de corriger un grand nombre de dépendances défectueuses, passez à la version 4.* de Gulp ou à une version supérieure !

Comme d'autres l'ont déjà mentionné, Gulp 3.* n'est pas supporté par Node.js 12 ou supérieur, vous devrez donc rétrograder votre version de Node à 11.* ou inférieur, OU mettre à jour votre Gulp à 4.0.

La meilleure option dépend en fin de compte du temps dont vous disposez, car la mise à niveau de Gulp offre les avantages de gulpfiles plus propres et d'un contrôle intégré sur l'exécution des tâches en en série ou en parallèle mais il faut aussi que vous réécriviez votre fichier gulpfile en fonction d'une nouvelle syntaxe. pourrait (lire : probablement - voir la fin de ce commentaire) causer des conflits avec certaines dépendances.


Rétrogradation de Node.js

C'est l'option la plus simple et la plus rapide. Surtout si vous utilisez n o nvm car ils vous permettent d'installer et de passer très rapidement d'une version de Node.js à une autre.

Installation de la version de Node.js sur N

n 10.16.0

Installation d'une version de Node.js sur NVM

nvm install 10.16.0

Une fois que vous avez fait cela, vous mai besoin de reconstruire votre dépendances npm ou alternativement, supprimez vos deux node_modules dossier y votre package-lock.json et réinstaller vos dépendances. Cependant, si vous revenez simplement à une version préexistante de Node.js, vous devriez probablement vous en sortir.


Mise à jour de Gulp

Comme indiqué plus haut, il s'agit d'une tâche plus longue, mais qui peut s'avérer bénéfique à long terme. Par exemple, Node.js 12 a maintenant introduit un support natif pour les modules ES (derrière un drapeau expérimental) et un support complet dans Node.js 13.

Vous devrez peut-être mettre à jour Node.js pour l'utiliser, ce qui vous obligera à mettre à jour Gulp. Ou bien vous souhaitez simplement bénéficier des avantages de Gulp 4, car il offre un contrôle meilleur et plus efficace des tâches d'écriture.

Il existe déjà un certain nombre d'articles à ce sujet, je ne m'étendrai donc pas davantage sur les détails, mais je tiens à rappeler que ce n'est pas un travail rapide . Selon la taille de votre projet, il se peut qu'une réécriture importante soit nécessaire et que des dépendances soient rompues. Si vous manquez de temps, vous devriez opter pour une simple mise à niveau de Node.js, au moins temporairement.


Mais j'ai déjà Gulp 4, et ça ne marche toujours pas !

Si, comme moi, vous utilisez déjà Gulp 4+ (j'utilisais Gulp 4.0.2 (à l'origine sur Node.js 10) et que vous avez récemment effectué une mise à niveau (j'ai effectué une mise à niveau vers Node.js 13.8.0), si vous rencontrez toujours le problème, c'est peut-être parce qu'une dépendance repose sur une ancienne version de Gulp, et qu'elle est prise dans le pipeline.

Dans mon cas, gulp-combine-mq était une dépendance en utilisant Gulp 3.9.*. La désactivation de cette tâche dans mon gulpfile a permis à Gulp de fonctionner à nouveau.

Si cela se produit, vous avez quelques options. Vous pouvez,

  1. Renoncez au plugin s'il n'est pas absolument nécessaire.
  2. Trouvez une alternative,
  3. Corriger le plugin

Il va sans dire que si vous avez plusieurs plugins qui dépendent d'une ancienne version de Gulp - surtout si ces plugins sont vitaux pour votre application - la mise à jour de Gulp peut représenter une énorme quantité de temps supplémentaire (d'où les avertissements ci-dessus).

Si cela se produit, il est préférable de simplement rétrograder Node.js, au moins jusqu'à ce que des correctifs puissent être publiés.

28voto

saumilsdk Points 376

Une solution simple et élégante

Il suffit de suivre ces étapes. Cela a fonctionné parfaitement avec l'exécution de npm install plusieurs fois ou l'installation de tout autre module ou même la publication du projet dans artifactory.

Dans le même répertoire où se trouve le fichier package.json, créez un fichier npm-shrinkwrap.json avec le contenu suivant :

{
  "dependencies": {
    "graceful-fs": {
        "version": "4.2.2"
     }
  }
}

Lancez npm install, et ne vous inquiétez pas, il va mettre à jour npm-shrinkwrap.json avec un tas de contenu. Débarrassons-nous de ces mises à jour en mettant à jour paquet.json options de scripts.

"scripts": {
    "preshrinkwrap": "git checkout -- npm-shrinkwrap.json",
    "postshrinkwrap": "git checkout -- npm-shrinkwrap.json"
}

Vous pouvez maintenant exécuter npm install et votre npm-shrinkwrap.json sera intact et fonctionnera pour toujours.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X