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

919voto

Valentin Points 853

Nous avons rencontré le même problème lors de la mise à jour d'un projet ancien dépendant de gulp@3.9.1 à Node.js 12+.

Ces corrections vous permettent d'utiliser Node.js 12+ avec gulp@3.9.1 en passant outre graceful-fs à la version ^4.2.4 .

Si vous utilisez le fil v1

Fil v1 supporte la résolution d'un paquet vers une version définie . Vous devez ajouter un resolutions à votre package.json :

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

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

Si vous utilisez npm

Utilisation de npm-force-resolutions comme un script de préinstallation, vous pouvez obtenir un résultat similaire à celui obtenu avec 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.4"
  }
}

npm-force-resolutions modifiera le package-lock.json pour définir graceful-fs à la version souhaitée avant le install est fait.

Si vous utilisez une .npmrc dans votre projet et qu'il contient un proxy ou un registre personnalisé, vous devrez peut-être modifier les éléments suivants npx npm-force-resolutions a npx --userconfig .npmrc npm-force-resolutions parce qu'à partir de maintenant, npx n'utilise pas le dossier actuel .npmrc par défaut.

Origine du problème

Cette question découle du fait que gulp@3.9.1 dépend de en graceful-fs@^3.0.0 qui monkeypatches Node.js fs module.

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

graceful-fs@^4.0.0 ne fait pas de monkeypatch Node.js fs plus, ce qui le rend compatible avec Node.js > 11.15 (testé et fonctionnant avec les versions 12 et 14).

Notez qu'il ne s'agit pas d'une solution pérenne, mais elle est utile lorsque vous n'avez pas le temps d'effectuer une mise à jour de l'application gulp@^4.0.0 .

912voto

Hassan Hodges Points 7474

Je rencontre la même erreur. Je soupçonne que vous utilisez Node.js 12 et Gulp.js 3. Cette combinaison ne fonctionne pas : Gulp.js 3 est cassé sur Node.js 12 #2324

Une solution de contournement précédente, datant de janvier, ne fonctionne pas non plus : Après la mise à jour vers Node.js 11.0.0, l'exécution de Gulp.js se termine avec 'ReferenceError : internalBinding is not defined' #2246

Solution : Mettez à niveau vers Gulp.js 4 ou passez à une version antérieure de Node.js.

505voto

PossessWithin Points 532

Réparez-le en une minute :

Il suffit de suivre ces étapes . Je suis sous Windows 10 et cela a parfaitement fonctionné pour moi !

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

        {
          "dependencies": {
            "graceful-fs": {
                "version": "4.2.2"
             }
          }
        }
  2. Exécuter npm install et ne vous inquiétez pas, il sera mis à jour. npm-shrinkwrap.json avec un tas de contenu.

  3. Exécuter gulp pour démarrer le projet.

147voto

Utilisez les commandes suivantes et installez Node.js v11.15.0 :

npm install -g n

sudo n 11.15.0

résoudra

ReferenceError : primordials n'est pas défini dans le noeud

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

6 votes

Cela a marché pour moi ! Excellente réponse. J'ai essayé de comprendre cette question pendant des heures.

4 votes

Parfait ! Ça a marché pour moi.

4 votes

Veuillez ne pas utiliser une version impaire de NodeJS. Ces versions sont éphémères. Utilisez NodeJS 10.

55voto

Cundong Zhang Points 473

Utilisez les commandes suivantes pour installer Node.js v11.15.0 et Gulp.js v3.9.1 :

npm install -g n

sudo n 11.15.0

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

Cela résoudra ce problème :

ReferenceError : primordials n'est pas défini dans le noeud

4 votes

Ça a marché pour moi, mais j'ai dû suivre toutes les étapes.

9 votes

S'il vous plaît, n'utilisez pas une branche NodeJS éphémère (tous les numéros de version impairs comme 9 et 11), utilisez NodeJS 10.

0 votes

Sérieusement, suivez toutes les étapes.

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