我收到了一个错误:fs.js:36 } = primordials; ^ ReferenceError: primordials is not defined。

9
我遇到了以下错误,我的 node 版本是 12.18,在运行 npm start 启动项目时出现了该错误。
 fs.js:36
  } = primordials;
^

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

有人回答说这是gulp和node 12的问题 (如何解决Node中的ReferenceError: primordials is not defined错误)

但我在项目中没有使用gulp,也没有安装gulp。

以下是我的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"
    }
}

我的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);
});

当我运行 npm start 时。 - MJ X
我更新了我的问题,还添加了server.js的细节。 - MJ X
1
发现149个漏洞(81个低风险,15个中等风险,52个高风险,1个严重风险)难道不让您担忧吗?我刚刚安装了Node 12.18.0,并使用您的确切package.json运行了npm install。请更新您的依赖项... - Patrick Roberts
2个回答

12
在项目根目录创建一个名为npm-shrinkwrap.json的文件。
将以下代码添加到文件中:
{
   "dependencies": {
      "graceful-fs": {
         "version": "4.2.2"
      }
   }
}

11

如果您查看错误消息中未提供的堆栈跟踪:

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)

你会发现错误源于 natives 模块。 运行 npm ls natives,你可以确定它是 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

你的express-handlebars依赖版本极其过时。将其从^2.0.1更新至^5.1.0即可解决问题,但你不应该忽略剩余的审核信息

found 146 vulnerabilities (80 low, 15 moderate, 51 high)
  run `npm audit fix` to fix them, or `npm audit` for details

1
我的问题不同,但在运行npm ls graceful-fs后,我发现所有依赖于此包的其他包。我看到它们中的大多数需要graceful-fs版本3,但是这个版本在win 10上的新版nodejs中存在问题。 因此,手动浏览package-lock.json和npm-shrinkwrap.json,并更改所需的graceful-fs版本,然后运行npm audit fix --force为我完成了工作。 我已经阅读了关于这个问题的几个小时,只有这个方法适用于我。 - Svetoslav Stefanov
我有同样的问题。https://stackoverflow.com/questions/72760385/how-to-solve-referenceerror-primordials-is-not-defined-at-fs-js475-previous。你能帮我吗? - Elham Bagheri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接