开发者问题收集

如何修复 Node.js 中的“ReferenceError:primordials 未定义”

2019-04-30
1066208

我已通过“npm install”安装了 Node.js 模块,然后尝试在命令提示符中执行 gulp sass-watch 。之后,我得到了以下响应。

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

ReferenceError: primordials is not defined

我之前曾尝试过 gulp sass-watch

npm -g install gulp-cli
3个回答

我们在将依赖于 [email protected] 的旧项目更新为 Node.js 12+ 时遇到了同样的问题。

这些修复使您可以将 graceful-fs 覆盖为版本 ^4.2.11 ,从而将 Node.js 12+ 与 [email protected] 结合使用。

如果您使用的是 pnpm

pnpm 支持 覆盖某些依赖版本 。为此,您应该在 package.json 文件中添加 pnpm 部分:

{
  "pnpm": {
    "overrides": {
      "graceful-fs": "^4.2.11"
    }
  }
}

如果您使用的是 yarn v1

Yarn v1 支持将包解析为定义的版本 。 您需要在 package.json 中添加一个 resolutions 部分:

{
  "resolutions": {
    "graceful-fs": "^4.2.11"
  }
}

感谢 @jazd 提供此解决问题的方法。

如果您使用的是 npm

运行此命令以了解您正在使用的 npm 版本:

npm -v

它将返回版本号 <major>.<minor>.<patch> ,例如 8.4.0

如果您的版本是 v8.3.0 或更高版本,则可以通过添加 package.json 文件中的 overrides 部分

{
  "overrides": {
    "graceful-fs": "^4.2.11"
  }
}

否则,您需要使用 npm-force-resolutions 作为预安装脚本,以便能够通过更改 package.json 文件来覆盖 graceful-fs 的版本:

{
  "scripts": {
    "preinstall": "npx npm-force-resolutions"
  },
  "resolutions": {
    "graceful-fs": "^4.2.11"
  }
}

npm-force-resolutions 将更改 package-lock.json 文件,以在 install 之前将 graceful-fs 设置为所需版本完成。

如果您在项目中使用自定义 .npmrc 文件,并且它包含代理或自定义注册表,则可能需要将 npx npm-force-resolutions 更改为 npx --userconfig .npmrc npm-force-resolutions ,因为某些版本的 npx 默认不使用当前文件夹 .npmrc 文件。

问题的根源

此问题源于 [email protected] 依赖 graceful-fs@^3.0.0 ,它为 Node.js fs 模块打上了 monkeypatches 补丁。

它曾经与 Node.js 一起使用,直到版本 11.15(这是来自开发分支的 版本 ,不应在生产中使用)。

graceful-fs@^4.0.0 不再 monkeypatch Node.js fs 模块,这使其与 Node.js > 11.15 兼容(已测试并适用于版本 12、14、16、18 和 20)。

请注意,这不是一个永久的解决方案,但当您没有时间更新到 gulp@^4.0.0 时它会有所帮助。

Valentin
2019-10-15

我遇到了同样的错误。我怀疑你使用的是 Node.js 12 和 Gulp.js 3。这种组合不起作用: Gulp.js 3 在 Node.js 12 上损坏 #2324

1 月之前的解决方案也不起作用: 更新到 Node.js 11.0.0 后,运行 Gulp.js 时会退出并显示“ReferenceError:internalBinding 未定义”#2246

解决方案:升级到 Gulp.js 4 或降级到早期版本的 Node.js。

Hassan Hodges
2019-04-30

一分钟内修复:

只需按照 这些步骤 操作即可。我在 Windows 10 上,它对我来说非常完美!

  1. 在包含 package.json 的同一目录中,创建一个包含以下内容的 npm-shrinkwrap.json 文件:

     {
    "dependencies": {
    "graceful-fs": {
    "version": "4.2.2"
    }
    }
    }
    
  2. 运行 npm install ,不用担心,它会使用大量内容更新 npm-shrinkwrap.json

  3. 运行 gulp 以启动项目。

Diego Fortes
2020-03-29