How to fix "ReferenceError: primordials is not defined" in Node.js

759,488

Solution 1

I hit the same error. I suspect you're using Node.js 12 and Gulp.js 3. That combination does not work: Gulp.js 3 is broken on Node.js 12 #2324

A previous workaround from Jan. does not work either: After update to Node.js 11.0.0 running Gulp.js exits with 'ReferenceError: internalBinding is not defined' #2246

Solution: Either upgrade to Gulp.js 4 or downgrade to an earlier version of Node.js.

Solution 2

We encountered the same issue when updating a legacy project depending on [email protected] to Node.js 12+.

These fixes enable you to use Node.js 12+ with [email protected] by overriding graceful-fs to version ^4.2.9.

If you are using yarn v1

Yarn v1 supports resolving a package to a defined version. You need to add a resolutions section to your package.json:

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

Thanks @jazd for this way to solve the issue.

If you are using npm >= 8.3.0

npm@^8.3.0 enables you to override the version of a package of your project's dependencies. To do so, you should add an overrides section in your package.json:

{
  // Your current package.json
  "overrides": {
    "graceful-fs": "^4.2.9"
  }
}

If you are using npm < 8.3.0

Using npm-force-resolutions as a preinstall script, you can obtain a similar result as with yarn v1. You need to modify your package.json this way:

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

npm-force-resolutions will alter the package-lock.json file to set graceful-fsto the wanted version before the install is done.

If you are using a custom .npmrc file in your project and it contains either a proxy or custom registry, you might need to change npx npm-force-resolutions to npx --userconfig .npmrc npm-force-resolutions because as of now, npx doesn't use the current folder .npmrc file by default.

Origin of the problem

This issue stems from the fact that [email protected] depends on graceful-fs@^3.0.0 which monkeypatches Node.js fs module.

This used to work with Node.js until version 11.15 (which is a version from a development branch and shouldn't be used in production).

graceful-fs@^4.0.0 does not monkeypatch Node.js fs module anymore, which makes it compatible with Node.js > 11.15 (tested and working with versions 12 and 14).

Note that this is not a perennial solution but it helps when you don't have the time to update to gulp@^4.0.0.

Solution 3

Fix it in one minute:

Just follow these steps. I'm on Windows 10 and it worked perfectly for me!

  1. In the same directory where you have package.json create a npm-shrinkwrap.json file with the following contents:

        {
          "dependencies": {
            "graceful-fs": {
                "version": "4.2.2"
             }
          }
        }
    
  2. Run npm install, and don't worry, it will update npm-shrinkwrap.json with a bunch of content.

  3. Run gulp to start the project.

Solution 4

Use the following commands and install Node.js v11.15.0:

npm install -g n

sudo n 11.15.0

will solve

ReferenceError: primordials is not defined in node

Referred from @Terje Norderhaug @Tom Corelis answers.

Solution 5

Use the following commands to install Node.js v11.15.0 and 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

It will solve this issue:

ReferenceError: primordials is not defined in node

Share:
759,488
Ramesh
Author by

Ramesh

Updated on January 21, 2022

Comments

  • Ramesh
    Ramesh over 2 years

    I have installed Node.js modules by 'npm install', and then I tried to do gulp sass-watch in a command prompt. After that, I got the below response.

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

    I have tried this before gulp sass-watch:

    npm -g install gulp-cli