如何修复 Node.js 中的“ReferenceError:primordials 未定义”
我已通过“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
我们在将依赖于
[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
时它会有所帮助。
我遇到了同样的错误。我怀疑你使用的是 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。
一分钟内修复:
只需按照 这些步骤 操作即可。我在 Windows 10 上,它对我来说非常完美!
-
在包含
package.json
的同一目录中,创建一个包含以下内容的npm-shrinkwrap.json
文件:{ "dependencies": { "graceful-fs": { "version": "4.2.2" } } }
-
运行
npm install
,不用担心,它会使用大量内容更新npm-shrinkwrap.json
。 -
运行
gulp
以启动项目。