[英]How to fix "ReferenceError: primordials is not defined" in Node.js
我已经通过“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
我遇到了同样的错误。 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
1 月以前的解决方法也不起作用:更新到 Node.js 11.0.0 后,运行 Gulp.js 退出并出现“ReferenceError:internalBinding is not defined”#2246
解决方案:升级到 Gulp.js 4 或降级到 Node.js 的早期版本。
在将依赖gulp@3.9.1
的旧项目更新到 Node.js 12+ 时,我们遇到了同样的问题。
这些修复使您能够通过将graceful-fs
覆盖到版本^4.2.9
来使用 Node.js 12+ 和gulp@3.9.1
。
Yarn v1 支持将 package 解析为定义的版本。 您需要在package.json
中添加resolutions
部分:
{
// Your current package.json contents
"resolutions": {
"graceful-fs": "^4.2.9"
}
}
感谢@jazd以这种方式解决问题。
npm@^8.3.0
使您能够覆盖项目依赖项的 package 版本。 为此,您应该在 package.json 中添加overrides
部分:
{
// Your current package.json
"overrides": {
"graceful-fs": "^4.2.9"
}
}
使用npm-force-resolutions
作为预安装脚本,您可以获得与使用 yarn v1 类似的结果。 您需要以这种方式修改 package.json:
{
// Your current package.json
"scripts": {
// Your current package.json scripts
"preinstall": "npx npm-force-resolutions"
},
"resolutions": {
"graceful-fs": "^4.2.9"
}
}
npm-force-resolutions
将更改package-lock.json
文件以在install
完成之前将graceful-fs
设置为所需版本。
如果您在项目中使用自定义.npmrc
文件并且它包含代理或自定义注册表,则您可能需要将 npx npm-force- npx npm-force-resolutions
更改为npx --userconfig.npmrc npm-force-resolutions
因为到目前为止,默认情况下, .npmrc
npx
。
这个问题源于gulp@3.9.1
依赖于graceful-fs@^3.0.0
的猴子补丁 Node.js fs
模块的事实。
这曾经与 Node.js 一起工作,直到版本 11.15(这是来自开发分支的版本,不应在生产中使用)。
graceful-fs@^4.0.0
不再对 Node.js fs
模块进行猴子补丁,这使其与 Node.js > 11.15 兼容(测试并使用版本 12 和 14)。
请注意,这不是一个长期的解决方案,但当您没有时间更新到gulp@^4.0.0
时,它会有所帮助。
只需按照这些步骤。 我在 Windows 10 上,它非常适合我
在您拥有package.json
的同一目录中,创建一个npm-shrinkwrap.json
shrinkwrap.json 文件,其内容如下:
{ "dependencies": { "graceful-fs": { "version": "4.2.2" } } }
运行npm install
,别担心,它会用一堆内容更新npm-shrinkwrap.json
shrinkwrap.json 。
运行gulp
启动项目。
使用以下命令并安装Node.js v11.15.0 :
npm install -g n
sudo n 11.15.0
将解决
ReferenceError: primordials 未在节点中定义
参考@Terje Norderhaug @Tom Corelis 的答案。
使用以下命令安装 Node.js v11.15.0 和 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
它将解决这个问题:
ReferenceError: primordials 未在节点中定义
对我来说, Diego Fortes 的回答只需稍加改动即可。
如果出现此错误,这是我的工作流程:
npm install
npm install gulp
创建文件npm-shrinkwrap.json与
{ "dependencies": { "graceful-fs": { "version": "4.2.2" } } }
npm install
(再次)(不是npm install gulp
非常重要 - 否则错误会回来)
gulp(正在工作)
使用NVM管理您正在使用的 Node.js 版本,运行以下命令对我有用:
cd /to/your/project/
nvm install lts/dubnium
nvm use lts/dubnium
yarn upgrade # or `npm install`
Gulp 3.*
不适用于 Node.js 12.*
或更高版本。 您必须降级 Node.js,或升级 Gulp。
如果时间紧迫,请将 Node.js 降级到 v11.* 或以下; 如果您需要更新的功能,并且有时间修复大量损坏的依赖项,请将 Gulp 升级到 4.* 或更高版本
正如其他人已经提到的,Node.js 12 或更高版本不支持 Gulp 3.*,因此您必须将 Node 版本降级到 11.* 或更低版本,或者将您的 ZF5700A296CF2DA0C74D90F780.AE8 升级到
最好的选择最终取决于你有多少时间,因为升级 Gulp 带来了更干净的 gulpfile 和对任务串行或并行运行的内置控制的好处,但也依赖于你将 gulpfile 重写为新语法,并且可能(阅读:可能会 - 看到此评论的结尾)导致与某些依赖项发生冲突。
这是最简单和最快的选择。 特别是如果您使用n或nvm ,因为它们允许您非常快速地安装和在 Node.js 版本之间切换。
n 10.16.0
nvm install 10.16.0
完成此操作后,您可能需要重建npm 依赖项,或者删除node_modules
文件夹和package-lock.json
文件并重新安装依赖项。 虽然如果您只是恢复到先前存在的 Node.js 版本,您应该没问题。
如上所述,这是一项更耗时的任务,但从长远来看,它可能会带来好处。 例如,Node.js 12 现在引入了对 ES 模块的本机支持(在实验标志后面)和 Node.js 13 中的完全支持。
您可能需要升级 Node.js 才能使用它,迫使您升级 Gulp。 或者您可能只是想要使用 Gulp 4 的好处,因为它可以更好、更有效地控制写入任务。
已经有很多关于这方面的文章,所以我不会进一步详细说明细节,但重申一下 -这不是一项快速的工作。 根据您项目的大小,可能需要进行一些显着的重写,并且您的依赖项可能会中断。 如果您时间不够用,您应该选择简单地降级 Node.js,至少是暂时的。
If, like me, you are already using Gulp 4+ (I was using Gulp 4.0.2
, originally on Node.js 10) and have recently upgraded (I upgraded to Node.js 13.8.0) are you are still getting the issue, it may be因为依赖项依赖于旧版本的 Gulp,而这正陷入困境。
就我而言, gulp-combine-mq
是使用 Gulp 3.9.* 的依赖项。 在我的 gulpfile 中禁用此任务允许 Gulp 再次运行。
如果发生这种情况,您有几个选择。 你可以,
不用说,如果您有几个依赖于旧版本 Gulp 的插件 - 特别是如果这些插件对您的应用程序至关重要 - 这可能会花费大量额外的时间来升级 Gulp(因此出现上述警告) .
如果发生这种情况,最好只降级 Node.js,至少在可以发布补丁之前。
简单优雅的解决方案
只需按照以下步骤操作。 它与 npm 安装运行多次或安装任何其他模块甚至发布项目到工件完美配合。
在您拥有 package.json 的同一目录中,创建一个npm- shrinkwrap.json 文件,其内容如下:
{
"dependencies": {
"graceful-fs": {
"version": "4.2.2"
}
}
}
运行 npm 安装,别担心,它会用一堆内容更新 npm-shrinkwrap.json。 让我们通过更新package.json脚本选项来摆脱这个更新。
"scripts": {
"preshrinkwrap": "git checkout -- npm-shrinkwrap.json",
"postshrinkwrap": "git checkout -- npm-shrinkwrap.json"
}
现在您可以运行 npm 安装,并且您的 npm-shrinkwrap.json 将完好无损并且将永远工作。
Gulp 3.9.1 不适用于 Node v12.xx,如果升级到 Gulp 4.0.2,则必须使用新语法(系列和并行)完全更改 gulpfile.js。 所以你最好的选择是通过在终端中简单地使用以下代码来降级到 Node.js v 11.xx(11.15.0 版本对我来说很好):
nvm install 11.15.0
nvm use 11.15.0 # Just in case it didn't automatically select the 11.15.0 as the main node.
nvm uninstall 13.1.0
npm rebuild node-sass
查看 Node.js 版本:
node --version
检查 gulp 版本:
gulp -v
如果 Node.js >=12 和 gulp <= 3,请执行以下操作之一:
sudo npm install -g gulp
sudo npm install -g n
sudo n 11.15.0
如果问题不是来自gulp
则检查解压缩npm 模块。 自上次更新以来已经过去了大约六年。 它不适用于 Node.js > v11。
尝试这个:
npm install -g n
sudo n 11.15.0
这个错误是因为新版本的Node.js (12)和旧版本的Gulp (小于4)。
不建议降级 Node.js 和其他依赖项。 我通过更新package.json
文件解决了这个问题,获取所有依赖项的最新版本。 为此,我使用npm-check-updates
。 它是一个使用所有依赖项的最新版本更新package.json
的模块。
参考: https://www.npmjs.com/package/npm-check-updates
npm i -g npm-check-updates
ncu -u
npm install
在大多数情况下,我们必须更新gulpfile.js
,如下所示:
参考: Gulp 4:新的任务执行系统——gulp.parallel和gulp.series,迁移
前:
gulp.task(
'sass', function () {
return gulp.src([sourcePath + '/sass/**/*.scss', "!" + sourcePath + "/sass/**/_*.scss"])
....
}
);
Other configuration...
gulp.task(
'watch', function () {
gulp.watch(sourcePath + '/sass/**/*.scss', ['sass']);
}
);
后:
gulp.task('sass', gulp.series(function(done) {
return gulp.src([sourcePath + '/sass/**/*.scss', "!" + sourcePath + "/sass/**/_*.scss"])
...
done();
}));
Other config...
gulp.task(
'watch', function () {
gulp.watch(sourcePath + '/sass/**/*.scss', gulp.series('sass'));
}
);
我的问题仅出现在 Visual Studio 的Task Runner Explorer中,而不是从命令行或 PowerShell 运行时。
我意识到 VS 忽略了我用NVM设置的 Node 版本。
这篇文章给出了答案: Configure which NPM is used by Visual Studio's Task Runner Explorer? 通过将PATH变量设置为比 VS 中的外部工具更高的优先级,它使用了 NVM 设置的 Node 版本,而不是 VS 安装的版本。
我遇到了同样的问题。 我尝试了什么,什么对我有用:
检查Node.js和Gulp.js的版本(Node.js v12 和 ZF5700A2964CF2DA0B4D90F7 的组合不工作)
我通过以下方式降级了 NPM 版本:
sudo NPM install -gn sudo n 10.16.0
它工作得很好。 然后只需按照控制台的说明进行操作即可。
降级到 Node.js stable 为我解决了这个问题,因为它发生在我升级到 Node.js 12 之后:
sudo n 10.16.0
我在 Windows 10 上收到此错误。原来是漫游配置文件损坏。
npm ERR! node v12.4.0
npm ERR! npm v3.3.12
npm ERR! primordials is not defined
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR! <https://github.com/npm/npm/issues>
npm ERR! Please include the following file with any support request:
删除C:\Users\{user}\AppData\Roaming\npm
文件夹解决了我的问题。
升级到 4.0.1 并确保迁移https://fettblog.eu/gulp-4-parallel-and-series/#migration
如果在使用最新的 gulp ^4.0 的同时保留 Node.js v12,请执行以下步骤:
使用以下命令更新命令行界面(只是为了预防起见):
npm i gulp-cli -g
在package.json文件的依赖项部分下添加/更新gulp
"dependencies": {
"gulp": "^4.0.0"
}
删除您的package-lock.json
文件。
删除你的node_modules
文件夹。
最后,运行npm i
升级并重新创建一个全新的node_modules文件夹和package-lock.json文件,并为 Gulp ^4.0 提供正确的参数:
npm i
注意Gulp.js 4.0 引入了series()
和parallel()
方法来组合任务,而不是 Gulp 3 中使用的数组方法,因此您可能会或可能不会在旧的gulpfile.js
脚本中遇到错误。
要了解有关应用这些新功能的更多信息,此站点确实做到了:如何迁移到 Gulp.js 4.0
我通过从添加或删除程序→ Node.js 卸载 Node.js 在 Windows 10 上修复了此问题。
然后我从https://nodejs.org/download/release/v11.15.0/安装了 11.15.0 版本
如果您正在运行 Windows 64 位,请选择node-v11.15.0-x64.msi 。
如果您尝试安装semantic-ui
并且出现以下错误,请尝试从 Node.js.org 下载具有最新功能的 Node.js js(13.5.0)
的最新版本。
此外,与其尝试 NPM 安装语义,不如将链接(可以从cdnjs 链接中找到)添加到index.html
文件的 header 中。
Gulp 与 Node.js 版本 11 及更高版本有关。 卸载您当前的 Node.js 版本并重新安装v10.15.1
版本。 这是该版本的链接。 这对我有帮助,也可以解决您的问题。
我已经尝试了很多建议来解决我的 Windows 10 机器上的现有项目的这个问题,并最终按照这些步骤来解决它;
gulp -v
然后node -v
检查它是否已完全卸载。请注意,有时当我在 git 分支之间切换时,我可能需要关闭我的 Visual Studio 并再次以管理员身份运行它才能看到此解决方案再次运行。
据我所知,在我为一个新项目安装了 Node.js 的最新推荐版本(12.18.4)后,这个问题开始发生,我只有在现有的 web 项目上没有反映一些 FE 更改时才意识到这一点。
更新:今天我在新 PC 上设置现有项目之一时遇到了同样的问题,我做了同样的步骤 + 转到我有 gulpfile 的目录,然后运行npm install
。
安装 gulp 并将您的 Node.js 版本添加到package.Z466DEEC76ECDF5FCA65D38571F6324文件中
{
"dependencies": {
"node": "^10.16.3"
}
}
看来您已将 nodejs 的版本升级为 +12 并且仍在使用 gulp 3.9.1
您可以使用以下解决方案之一
我遇到了同样的错误,但它是由不同的问题引起的。
OS: windows 10
nodejs version: 15.12.0
npm version: 7.6.3
问题的原因是优雅-fs package。 每当我尝试运行 npm 时,即使运行 npm-v 也会触发“ReferenceError: primordials is not defined”。
我尝试运行 npm install graceful-fs@latest,但它仍然不起作用,即使 package 是最新版本。
那么是什么帮助了我呢?
运行npm ls graceful-fs
通过这种方式,您将找到所有graceful-fs
包以及它具有的版本。 就我而言,它主要是 3.0 版,即使我已经安装了 4.2.6 版
那么如何解决呢?
打开 npm-shrinkwrap.json (不确定packages-lock.json)并更改搜索graceful-fs
- 你会看到它在一些地方有旧版本。 将其替换为^4.2.6
(或更新版本)。
然后npm audit fix --force
将在任何地方强制安装较新版本。
希望这对您有用,我花了几个小时才找到解决方法。
删除 package-lock.json 或 yarn.lock 文件。
然后删除 node_modules。
之后修改 package.json 文件-
“依赖项”:{“gulp”:“^4.0.0”}
然后运行- npm install
解决这个问题就足够了。
对于那些使用Yarn的人:
yarn global add n
n 11.15.0
yarn install # Have to install again
你在这里有两个选择
这是因为你的系统中node
和gulp
之间的兼容性问题。 降级node
或升级gulp
将解决此问题。
sudo npm i -g n
sudo n 11.15.0
如果仍然无法正常工作,请尝试删除node_modules
文件夹和package-lock.json
文件并使用npm i
命令再次安装。
我在安装 npm package webshot 时遇到了同样的问题。
注意:这是 package 的一个已知问题,因为它依赖于幕后的优雅 fs。
修复: 1.将 graceful-fs 升级到 4.x 或更高版本
修复:2.使用 webshot-node 代替https://www.npmjs.com/package/webshot-node
对我来说,在使用 series() 组合任务后,问题就解决了。
这里的任何答案都没有解决问题。
卸载节点,然后使用给定的链接重新安装它。 https://nodejs.org/en/download/
我建议您首先确保NPM 安装不是您的问题。 然后降级 Node.js 和 Gulp.js 版本。 我使用了 Node.js 10.16.1 和 Gulp.js 3.9.1。
要降级 Gulp.js 安装,您可以尝试:
npm install gulp@^3.9.1
在npm安装期间使用 Python 2(可执行python
)对我有用:
npm install --python=~/venv/bin/python
当我们使用 s3 NPM package 时,我们也会收到此错误。 所以问题在于优雅的 fs package - 我们需要更新它。 它在 4.2.3 上运行良好。
因此,只需查看它在日志跟踪中显示的 NPM package 并相应地将优雅 fs 更新为 4.2.3。
对于在 ADOS CI Build 中出于相同原因出现相同错误的任何人:
这个问题是我在寻求帮助时发现的第一个问题。 我有一个 ADOS CI 构建管道,其中第一个 Node.js 工具安装程序任务用于安装 Node.js。 然后 npm 任务用于安装 Gulp.js (npm install -g gulp)。 然后下面的 Gulp.js 任务从 gulpfile.js 运行 default-task。 里面有一些咕噜咕噜的东西。
当我更改 Node.js 工具以安装 12.x 最新节点而不是较旧的节点时,最新的 Gulp.js 版本是 4.0.2。 结果与问题中描述的错误相同。
在这种情况下,对我有用的是将 Node.js 降级到最新的 11.x 版本,正如 Alphonse R 已经建议的那样。 Dsouza 和 Aymen Yaseen。 在这种情况下,尽管不需要使用他们建议的任何命令,而只需将 Node.js 工具安装程序版本规范设置为 11.x 中的最新 Node.js 版本。
已安装并正在运行的 Node.js 的确切版本是 11.15.0。 我不必降级 Gulp.js。
我在 Node.js 12/13 和 Gulp.js 3 上也遇到了错误。移至 Node.js 11 有效。
我通过将 Node.js 版本从12.14.0
降级到10.18.0
并重新安装node_modules
来解决。
我使用的是 Node.js v12.13.1,所以我已经降级到 v10.19.0。 之后它工作得很好。
解决问题的步骤:
我已通过以下步骤解决了问题:
nvm install lts/dubnium
nvm install lts/dubnium
现在您可以部署 gulp。
对于遇到此问题的任何人,请确认您没有做过我做过的愚蠢的事情,并且在一百万年前不小心在您的用户目录中运行了npm init
并忘记清除这些文件。
我在尝试使用@vue-cli
创建一个新项目时发现了这个问题,它最终成为了一个流氓package.json
/ package-lock.json
node_modules
和我的模块用户文件夹的根目录。
解决方案:从您的用户目录中删除package.json
, package-lock.json
和node_modules
,瞧,问题解决了,现在从 forehead 中删除手掌
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.