9

I get the following error, my node version is: 12.18 when I run npm start to start my project

 fs.js:36
  } = primordials;
^

ReferenceError: primordials is not defined
at fs.js:36:5

someone answered that its problem with gulp and node 12 (How to fix ReferenceError: primordials is not defined in node)

but I don't use gulp in my project and I don't have gulp installed.

below is my package.json

{
    "name":"myapp",
    "version":"1.0.0",
    "description":"",
    "scripts":{
        "start":"node server.js",
        "test":"echo \"Error: no test specified\" && exit 1"
    },
    "author":"MJX",
    "license":"ISC",
    "dependencies":{
        "body-parser":"^1.19.0",
        "express":"^4.17.1",
        "express-handlebars":"^2.0.1",
        "mssql":"^6.2.1",
        "mysql":"^2.18.1",
        "nodemon":"^1.19.4",
        "npm":"^5.10.0"
    },
    "devDependencies":{
        "handlebars-helper-css":"^0.1.0"
    }
}

and my server.js:

var express = require("express");
var bodyParser = require("body-parser");

var PORT = process.env.PORT || 4300;

var app = express();

app.use(express.static("public"));

app.use(bodyParser.urlencoded({ extended: true }));

app.use(bodyParser.json());

var exphbs = require("express-handlebars");

app.engine("handlebars", exphbs({ defaultLayout: "main" }));
app.set("view engine", "handlebars");

var routes = require("./controllers/burgersController.js");

app.use(routes);

app.listen(PORT, function() {
    console.log("App now listening at localhost:" + PORT);
});
MJ X
  • 8,506
  • 12
  • 74
  • 99

2 Answers2

12

Create a file named npm-shrinkwrap.json in the project root folder.

Add the following code to the file:

{
   "dependencies": {
      "graceful-fs": {
         "version": "4.2.2"
      }
   }
}
Malakai
  • 3,011
  • 9
  • 35
  • 49
11

If you look at the stack trace in your error message that you didn't provide:

ReferenceError: primordials is not defined
    at fs.js:35:5
    at req_ (C:\Users\Patrick\Desktop\test\node_modules\natives\index.js:143:24)
    at Object.req [as require] (C:\Users\Patrick\Desktop\test\node_modules\natives\index.js:55:10)
    at Object.<anonymous> (C:\Users\Patrick\Desktop\test\node_modules\graceful-fs\fs.js:1:37)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Module.require (internal/modules/cjs/loader.js:1026:19)
    at require (internal/modules/cjs/helpers.js:72:18)

you'll find that the error originates from the natives module. Running npm ls natives, you can determine that it's a sub-dependency of express-handlebars:

myapp@1.0.0 C:\Users\Patrick\Desktop\test
`-- express-handlebars@2.0.1
  `-- graceful-fs@3.0.12
    `-- natives@1.1.6

Your express-handlebars dependency is extremely outdated. Updating it from ^2.0.1 to ^5.1.0 fixes your problem, but you really shouldn't ignore the rest of your audit messages:

found 146 vulnerabilities (80 low, 15 moderate, 51 high)
  run `npm audit fix` to fix them, or `npm audit` for details
Patrick Roberts
  • 49,224
  • 10
  • 102
  • 153
  • 1
    My problem was different, but after running npm ls graceful-fs I found all other packages that depend on this one. I saw that most of them need graceful-fs version 3, but this version is having problems with newer nodejs on win 10. So Manually going through package-lock.json & npm-shrinkwrap.json and changing the required graceful-fs version and then running npm audit fix --force did the job for me. I've been reading about this problem for hours and only this worked for me. – Svetoslav Stefanov Mar 22 '21 at 11:32
  • I have the same problem. https://stackoverflow.com/questions/72760385/how-to-solve-referenceerror-primordials-is-not-defined-at-fs-js475-previous. can you help me? – Elham Bagheri Jun 27 '22 at 05:08