Comment réparer ReferenceError: les primordiaux ne sont pas définis dans le nœud


368

J'ai installé des modules de noeud par npm install, puis j'ai essayé de faire gulp sass-watch dans l'invite de commande. Après cela, j'ai reçu 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 essayé avant de gorger sass-watch

npm -g install gulp-cli

Réponses:


470

J'ai touché la même erreur. Je soupçonne que vous utilisez le nœud 12 et gulp 3. Cette combinaison ne fonctionne pas: https://github.com/gulpjs/gulp/issues/2324

Une solution de contournement précédente de janvier ne fonctionne pas non plus: https://github.com/gulpjs/gulp/issues/2246

Solution: effectuez une mise à niveau vers gulp 4 ou rétrogradez vers un nœud antérieur.


20
Rencontré le même problème avec Khaos. La rétrogradation du nœud vers la version 11.15.0 a fait l'affaire.
Terje Norderhaug

4
Problème similaire ici en utilisant le webshotpackage de noeud. Je soupçonne qu'ils doivent mettre à jour quelque chose de leur côté avant de pouvoir continuer avec Node v12.
Jacob Morrison

69
J'utilise node v12.1.0et gulp gulp@4.0.2mais cela ne fonctionne pas
Most Wanted

32
J'ai essayé avec node v10.xet gulp v3.x, puis la magie est arrivée
kuldipem

12
Je recommanderais d'utiliser la solution npm-shrinkwrap.json publiée par Valentin: stackoverflow.com/a/58394828/2726785 , même s'il s'agit de la solution acceptée.
Erik Hansen

248

Nous avons rencontré le même problème lors de la mise à jour d'un projet hérité en fonction gulp@3.9.1de Node.js 12.

Ces correctifs vous permettent d'utiliser Node.js 12 avec gulp@3.9.1en remplaçant la graceful-fsversion 4.2.3.

Si votre projet n'est pas activement travaillé et que vous utilisez npm

Créez un npm-shrinkwrap.jsonfichier contenant ceci:

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

Validez ce npm-shrinkwrap.jsonfichier. Et puis exécutez npm installce qui mettra à jour le npm-shrinkwrap.jsonfichier.

Malheureusement, cette solution ne fonctionne plus si vous npm installrecommencez. Voir les autres solutions ci-dessous.

Si votre projet est en développement actif et que vous utilisez Yarn v1

Yarn v1 prend en charge la résolution d'un package dans une version définie . Vous devez ajouter une resolutionssection à votre package.json:

{
  // Your current package.json contents
  "resolutions": {
    "graceful-fs": "4.2.3"
  }
}

Merci @jazd pour cette façon de résoudre le problème.

Si votre projet est en développement actif et que vous utilisez npm

En utilisant npm-force-resolutionsun script de préinstallation, vous pouvez obtenir un résultat similaire à celui de Yarn v1. Vous devez modifier votre package.json de cette façon:

{
  // Your current package.json
  "scripts": {
    // Your current package.json scripts
    "preinstall": "npx npm-force-resolutions"
  },
  "resolutions": {
    "graceful-fs": "4.2.3"
  }
}

npm-force-resolutionsmodifiera le package-lock.jsonfichier pour définir graceful-fsla version souhaitée avant la fin install.

Si vous utilisez un .npmrcfichier personnalisé dans votre projet et qu'il contient un proxy ou un registre personnalisé, vous devez passer npx npm-force-resolutionsà npx --userconfig .npmrc npm-force-resolutionscar, pour l'instant, npxn'utilise pas le .npmrcfichier de dossier actuel par défaut.

Origine du problème

Ce problème provient du fait que cela gulp@3.9.1 dépend du module graceful-fs@^3.0.0monkeypatches Node.js.fs

Cela fonctionnait avec Node.js jusqu'à la version 11.15 (qui est une version d'une branche de développement et ne devrait pas être utilisée en production).

graceful-fs@^4.0.0ne monkeypatch fsplus le module Node.js , ce qui le rend compatible avec Node.js> 11.15.

Notez que ce n'est pas une solution pérenne mais cela aide lorsque vous n'avez pas le temps de passer à gulp@^4.0.0.


6
Wow - c'est super! Je n'avais pas envie de faire reculer mon installation de nœud, c'est donc une solution parfaite.
dgo

@Valentin, cela a fonctionné pour moi, mais comment cela a-t-il fonctionné? D'après ce que j'ai lu, en plus d'être publiable, npm-shrinkwrap.json devrait se comporter de la même manière que package-lock.json. Pourquoi ne se comportent-ils pas de la même manière ici? Pourquoi npm-shrinkwrap.json est-il nécessaire pour résoudre ce problème?
JordRoss

4
Cette solution est parfaite pour cette situation particulière - elle devrait vraiment être la réponse acceptée.
zerodevx

14
cela devrait être la réponse acceptée
jtate

1
@Valentin lorsque je cours npm installpour me régénérer package-lock.jsonou npm-shrinkwrap.json, il semblait ne pas pouvoir verrouiller ces dépendances. Après avoir relancé npm install --no-save, le généré package-lock.jsonindique toujours npm pour installer les dépendances manquantes.
PuiMan Cheui

95

Utilisez les commandes suivantes et installez le nœud v11.15.0 :

npm install -g n

sudo n 11.15.0

va résoudre

ReferenceError: les primordiaux ne sont pas définis dans le nœud

Référé de @Terje Norderhaug @Tom Corelis réponses.


3
A travaillé pour moi! Excellente réponse. J'essaie de comprendre celui-ci depuis des heures.
GlennFriesen

3
Réponse brillante!
user1974753

2
Parfait! A travaillé pour moi.
Raja

2
Vraiment, tu m'as sauvé la vie. Merci.
trjade

6
npm install -gn sur ma machine (Windows 64) produit une erreur: npm ERR! notsup Plateforme non prise en charge pour n@6.1.3: voulu {"os": "! win32", "arch": "any"} (actuel: {"os": "win32", "arch": "x64"})
Daryl McCullough

45

Réparez-le en 1 minute:

Suivez simplement ces étapes . Je suis sur Windows 10 et cela a parfaitement fonctionné pour moi!

  1. Dans le même répertoire où vous avez package.jsoncréé un npm-shrinkwrap.jsonfichier avec le contenu suivant:
    {
      "dependencies": {
        "graceful-fs": {
            "version": "4.2.2"
         }
      }
    }
  1. Exécutez npm install, et ne vous inquiétez pas, il se mettra à jour npm-shrinkwrap.jsonavec un tas de contenu.

  2. Exécutez gulppour démarrer le projet.


1
Fonctionne comme un charme sous win 10 / WSL - Merci!
opHASnoNAME

1
la réponse qui fonctionne comme un charme
Adiii

1
A fonctionné comme un charme dans Ubuntu également.
Manoj - GT

1
Fonctionne bien sur Win 10 pro! Merci :)
elhef

1
Génial! J'essayais de lancer le projet FilterBlend, mais j'ai obtenu cette fichue erreur. Après la mise à niveau vers gulp 4, j'ai eu une erreur différente (gulp.hasTask n'est pas une fonction). La création de ce fichier a permis de contourner le problème.
Dennis Kassel

27

Utilisez les commandes suivantes pour installer node v11.15.0et gulp v3.9.1:

npm install -g n

sudo n 11.15.0

npm install gulp@^3.9.1
npm install 
npm rebuild node-sass

Résoudra ce problème:

ReferenceError: primordials is not defined in node

1
A travaillé pour moi, a dû suivre toutes les étapes. 👍
Jason

1
Veuillez ne pas utiliser une branche NodeJS de courte durée (tous les numéros de version impairs comme 9 et 11), utilisez NodeJS 10.
Daniel Ruf

travaillé pour moi merci
Kapil soni

Sérieusement, suivez toutes les étapes.
Ele

La première commande échoue avec EBADPLATFORM sous Windows.
Ronan Paixão

22

Utiliser NVM pour gérer la version de noeud que vous utilisez, exécuter les commandes suivantes a fonctionné pour moi:

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

3
Je reviens toujours à cela.
neige

3
Veuillez ne pas utiliser une branche NodeJS de courte durée (tous les numéros de version impairs comme 9 et 11), utilisez NodeJS 10. Utilisez également à la 10place du nom de code.
Daniel Ruf

1
Pour Windows, utilisez nvm-windows .
Lupa

12

Gulp 3.9.1 ne fonctionne pas avec Node v12.xx, et si vous mettez à niveau vers Gulp 4.0.2, vous devez complètement changer gulpfile.js avec la nouvelle syntaxe (Series & Parallels). Donc, votre meilleur pari est de passer à Node V 11.xx, le 11.15.0 a bien fonctionné pour moi. En utilisant simplement le code suivant dans le 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

À votre santé!


Après cela, j'obtiens une erreur: "/ c / Users / User / AppData / Roaming / npm / node: ligne 8: C: \ Users \ User \ AppData \ Roaming \ npm / node_modules / node / bin / node: aucun fichier ou annuaire "
Ivan Topić

11

avait même erreur et enfin correctif lorsque mis à jour tous les paquets et mentionné la même version du moteur de noeud et la version NPM en package.jsontant qu'il est dans mon système de travail local.

 "engines": {
    "node": "10.15.3",
    "npm": "6.9.0"
 }

J'obtenais cette erreur lors du déploiement sur Heroku.

pour plus de support sur heroku checkout


6

La rétrogradation vers le nœud stable a résolu ce problème pour moi, car il s'est produit après la mise à niveau vers le nœud 12

sudo n 10.16.0


3
Si vous essayez ceci et obtenez l'erreur: 'sudo: n: commande introuvable', assurez-vous d'installer d' nabord avec: 'npm install -g n'
AlmostPitt

J'ai essayé cela sur Windows 10 (64 bits) et j'ai obtenu: - C: \ react-script-editor> npm install -gn npm ERR! code EBADPLATFORM npm ERR! notsup Plateforme non prise en charge pour n@6.1.0: recherche {"os": "! win32", "arch": "any"} (actuel: {"os": "win32", "arch": "x64"}) npm ERR! notsup Système d'exploitation valide:! win32 npm ERR! notsup Valid Arch: n'importe quel npm ERR! notsup OS réel: win32 npm ERR! arche réelle notsup: x64
Nigel Price

6

TL: DR

Gulp 3.*ne fonctionne pas sur Node 12.*ou supérieur. Vous devez rétrograder Node ou mettre à niveau Gulp.

Si vous manquez de temps, rétrogradez Node à v11. * Ou inférieur; si vous avez besoin de nouvelles fonctionnalités et que vous avez le temps de corriger une charge de dépendances cassées, mettez à niveau Gulp vers 4. * ou plus!

Comme d'autres l'ont déjà mentionné, Gulp 3.*n'est pas pris en charge sur Node 12ou supérieur, vous devrez donc rétrograder votre version Node vers 11.*ou ci-dessous, OU mettre à niveau votre Gulp vers4.0 .

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


Nœud de déclassement

C'est l'option la plus simple et la plus rapide. Surtout si vous utilisez n ou nvm , car ceux-ci vous permettent d'installer et de basculer très rapidement entre les versions de Node.

Installation de la version du nœud sur N

n 10.16.0

Installation de la version de Noeud sur NVM

nvm install 10.16.0

Une fois que vous avez fait cela, vous devrez peut- être reconstruire vos dépendances npm ou supprimer à la fois votre node_modulesdossier ET votre package-lock.jsonfichier et réinstaller vos dépendances. Bien que si vous revenez simplement à une version de nœud préexistante, cela devrait probablement aller.


Mise à niveau de Gulp

Comme mentionné ci-dessus, il s'agit d'une tâche plus longue, mais qui pourrait apporter des avantages à long terme. Par exemple, Node 12a désormais introduit la prise en charge native des modules ES (derrière un drapeau expérimental) et une prise en charge complète dans Node13 .

Vous devrez peut-être mettre à niveau Node pour l'utiliser, ce qui vous obligera à mettre à niveau Gulp. Ou vous pouvez simplement souhaiter les avantages de l'utilisation de Gulp 4, car il offre un contrôle meilleur et plus efficace sur les tâches d'écriture.

Il y a déjà un certain nombre d'articles à ce sujet, donc je ne développerai pas davantage sur les détails, mais pour réitérer - ce n'est pas un travail rapide . Selon la taille de votre projet, une réécriture importante peut être requise et des dépendances peuvent se briser. Si vous manquez de temps, vous devriez opter pour une simple rétrogradation de Node, 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 10) et avez récemment mis à niveau (j'ai mis à niveau versNode 13.8.0 ), vous rencontrez toujours le problème, c'est peut-être parce qu'une dépendance dépend d'un ancienne version de Gulp, et qui se fait prendre dans le pipeline.

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

Si cela se produit, vous avez quelques options: vous pouvez,

  1. Allez sans le plugin si ce n'est pas absolument nécessaire
  2. Trouvez une alternative,
  3. Réparer le plugin

Inutile de dire que si vous avez plusieurs plugins qui s'appuient sur une ancienne version de Gulp - en particulier si ces plugins sont essentiels pour votre application - c'est là qu'il peut y avoir un énorme temps supplémentaire consacré à la mise à niveau de Gulp (d'où les avertissements ci-dessus).

Si cela se produit, il est préférable de simplement rétrograder le nœud, au moins jusqu'à ce que des correctifs puissent être émis.


4

Cette erreur est due à la nouvelle version de Node (12) et à une ancienne version de gulp (moins de 4).

La rétrogradation de Node et d'autres dépendances n'est pas recommandée. J'ai résolu ce problème en mettant à jour le package.jsonfichier récupérant la dernière version de toutes les dépendances. Pour cela, j'utilise npm-check-updates. Il s'agit d'un module qui met à jour la package.jsonavec la dernière version de toutes les dépendances.

Référence : https://www.npmjs.com/package/npm-check-updates

npm i -g npm-check-updates
ncu -u
npm install

Dans la plupart des cas, nous devrons mettre à jour le gulpfile.jsainsi que le suivant:

Référence : https://fettblog.eu/gulp-4-parallel-and-series/#migration

Avant:

gulp.task(
    'sass', function () {
        return gulp.src([sourcePath + '/sass/**/*.scss', "!" + sourcePath + "/sass/**/_*.scss"])

            ....

    }
);

Other config...

gulp.task(
    'watch', function () {
        gulp.watch(sourcePath + '/sass/**/*.scss', ['sass']);
    }
);

Après:

gulp.task('sass', gulp.series(function(done) {
    return gulp.src([sourcePath + '/sass/**/*.scss', "!" + sourcePath + "/sass/**/_*.scss"])

            ...

    done();
}));

Other config...

gulp.task(
    'watch', function () {
        gulp.watch(sourcePath + '/sass/**/*.scss', gulp.series('sass'));
    }
);

Excellente solution si vous n'avez pas de fichiers gulp complexes. Dans mon cas, je n'ai eu qu'à adapter deux lignes par gulpfile.js. Merci pour le petit guide de migration!
Tobias

3

J'obtenais cette erreur sur Windows 10. Il s'est avéré être un profil d'itinérance corrompu.

npm ERR! node v12.4.0
npm ERR! npm  v3.3.12

npm ERR! primordials is not defined
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:

La suppression du C:\Users\{user}\AppData\Roaming\npmdossier a résolu mon problème.


2
Cela a gâché toutes mes dépendances npm, désolé.
ashilon

3

Suivez simplement ces étapes. Cela a parfaitement fonctionné avec l'installation de npm exécutée plusieurs fois ou l'installation de tout autre module ou même la publication d'un projet sur artificiel.

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

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

Exécutez npm install, et ne vous inquiétez pas, cela mettra à jour npm-shrinkwrap.json avec un tas de contenu. Débarrassons-nous de ces mises à jour en mettant à jour les options des scripts package.json .

"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.


2

Cela est peut-être arrivé en retard, mais pour ceux qui souhaitent toujours conserver leur Node v12 lors de l'utilisation de la dernière version de gulp ^ 4.0, procédez comme suit:

Mettez à jour l'interface de ligne de commande (juste par précaution) en utilisant:

npm i gulp-cli -g

Ajoutez / gulpmettez à jour la section under dependencies de votre package.json

"dependencies": {
  "gulp": "^4.0.0"
}

Supprimez votre package-lock.jsonfichier

Supprimez votre node_modulesdossier

Enfin, npm iexécutez pour mettre à niveau et recréer le tout nouveau dossier node_modules et le fichier package-lock.json avec les paramètres corrects pour Gulp ^ 4.0

npm i

Remarque Gulp.js 4.0 introduit les méthodes series()et parallel()pour combiner les tâches au lieu des méthodes de tableau utilisées dans Gulp 3, et vous pouvez donc ou non rencontrer une erreur dans votre ancien gulpfile.jsscript.

Pour en savoir plus sur l'application de ces nouvelles fonctionnalités, ce site y a vraiment rendu justice: https://www.sitepoint.com/how-to-migrate-to-gulp-4/

( Si cela aide, veuillez laisser un coup de poing )


À quoi ça gulp-clisert? J'ai suivi vos pas et j'ai tout fait fonctionner au début; mais ensuite j'ai désinstallé gulp-cli(puisque je n'ai pas vu où il était utilisé), et tout fonctionnait toujours. Merci pour la réponse, car je suis à nouveau opérationnel avec node v12.9.1et Gulp 4.0.2!
MuffinTheMan

Je suis content que cela ait aidé. gulp-cliest l'utilitaire de ligne de commande. Son assure une installation correcte de gulp Comme vous pouvez le voir dans les étapes d'installation de gulp
Sab

2

J'ai résolu ce problème sur Windows 10 en désinstallant le nœud de Ajouter ou supprimer des programmes -> Node.js

J'ai ensuite installé la version 11.15.0 à partir de https://nodejs.org/download/release/v11.15.0/

Choisissez node-v11.15.0-x64.msi si vous exécutez Windows 64 bits.



2

J'ai fait face au même problème. Ce que j'ai essayé et travaillé pour moi:

  1. Vérifiez la version de NODE et GULP (la combinaison de noeud v12 et gulp inférieure à v4 ne fonctionne pas)

  2. Je rétrograde la version NPM en:

    • sudo NPM install -gn
    • sudo n 10.16.0

Cela a bien fonctionné, puis suivez simplement les instructions de votre console.



1

Pour ceux qui utilisent yarn.

yarn global add n
n 11.15.0
yarn install # have to install again

Veuillez ne pas utiliser une branche NodeJS de courte durée (tous les numéros de version impairs comme 9 et 11), utilisez NodeJS 10.
Daniel Ruf

0

Pour toute personne ayant la même erreur pour la même raison dans ADOS CI Build:

Cette question a été la première que j'ai trouvée en cherchant de l'aide. J'ai un pipeline de construction ADOS CI où la première tâche d'installation de l'outil Node.js est utilisée pour installer Node. Ensuite, la tâche npm est utilisée pour installer gulp (npm install -g gulp). Ensuite, la tâche Gulp suivante exécute la tâche par défaut à partir de gulpfile.js. Il y a des trucs stupéfiants dedans.

Quand j'ai changé l'outil Node.js pour installer le dernier nœud 12.x au lieu d'un ancien et la dernière version de gulp était 4.0.2. Le résultat a été la même erreur que celle décrite dans la question.

Ce qui a fonctionné pour moi dans ce cas a été de rétrograder node.js vers la dernière version 11.x comme cela a déjà été suggéré par Alphonse R. Dsouza et Aymen Yaseen. Dans ce cas, il n'est pas nécessaire d'utiliser les commandes suggérées, mais définissez plutôt la spécification de version du programme d'installation de l'outil Node.js sur la dernière version de Node de 11.x.

entrez la description de l'image ici

La version exacte de Node.js qui a été installée et fonctionne était 11.15.0. Je n'ai pas eu à déclasser le Gulp.


0

J'ai rencontré cette erreur après la mise à niveau de mon nœud vers la version 12, qui ne fonctionne pas avec Gulp 3.9.1. En ce qui concerne le fait que mon gulpfile.js n'était pas si complexe, j'ai décidé de passer à Gulp 4 à l'aide de cet article , cela s'est bien passé et c'est beaucoup plus facile que je ne le pensais.


0

Vous avez deux options ici

  1. Soit mise à niveau vers gulp 4 ou autre
  2. rétrograder vers une version antérieure du nœud.

0

En effet, le problème de compatibilité entre nodeet gulpdans votre système. La rétrogradation nodeou la mise à niveau du gulpcorrigera ce problème.

sudo npm i -g n
sudo n 11.15.0

Essayez de supprimer le node_modulesdossier et le package-lock.jsonfichier et de réinstaller à l'aide de la npm icommande si cela ne fonctionne toujours pas.


0

Ce qui a fonctionné pour moi, c'est d'utiliser python2 lors de l'installation de npm.

> npm install --python=~/venv/bin/python

0

Comme nous obtenons également cette erreur lorsque nous utilisons le package s3 NPM. Le problème est donc avec le package graceful-fs, nous devons le mettre à jour. Cela fonctionne bien sur 4.2.3.

Il suffit donc de regarder dans quel package NPM il affiche dans les traces de journaux et de mettre à jour le graceful-fs en conséquence à 4.2.3.


0

J'obtenais également une erreur sur le nœud 12/13 avec Gulp 3, le passage au nœud 11 a fonctionné.


0

Résolu en rétrogradant la version Node.js de 12.14.0vers 10.18.0et en réinstallant node_modules.


0

Si vous essayez d'installer semantic-uiet que l'erreur suivante se produit, essayez de télécharger la dernière version du nœud js(13.5.0)avec les dernières fonctionnalités, à partir de Node.js.org.En outre, plutôt que d'essayer la sémantique d'installation de NPM, vous devez simplement ajouter le lien (que vous pouvez trouver du lien cdnjs vers l'en-tête de votre index.htmlfichier. Bonne chance!


Un exemple de code serait un excellent ajout ici.
Rhand

-1

Étapes pour résoudre le problème: -

J'ai résolu le problème avec les étapes suivantes: -

  1. Installation de NVM
  2. Installé lts / dubnium en utilisant la commande " nvm install lts / dubnium "
  3. Utilisez lts / dubnium en utilisant la commande " nvm install lts / dubnium "

Maintenant, vous pouvez vous déployer gulp


1
Ceci est une dupe inexacte de la réponse de @kevink
Z4-

-1

Je vous suggère d'abord de vous assurer que l' installation de NPM n'est pas votre problème. Ensuite, vous rétrogradez les versions de nœud et de gulp. J'ai utilisé le nœud 10.16.1 et gulp 3.9.1.

Pour rétrograder votre gorgée, vous pouvez essayer

npm install gulp@^3.9.1
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.