如何修复Node.js中的“ReReference ceError: primordials is not self”

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

[18:18:32] Requiring external module babel-registerfs.js:27const { Math, Object, Reflect } = primordials;^
ReferenceError: primordials is not defined

我以前试过gulp sass-watch

npm -g install gulp-cli
909120 次浏览

我遇到了同样的错误。我怀疑你使用的是Node.js12和Gulp.js3。这种组合不起作用:Gulp.js3在Node.js12#2324断开

1月的上一个解决方法也不起作用:更新到Node.js11.0.0运行后Gulp.js退出,并带有'引用错误:内部绑定未定义'#2246

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

我有同样的错误。当我更新所有软件包时,我终于修复了这个问题,然后在package.json中提到了相同的Node.js引擎版本和npm版本,因为它在我的本地工作系统中。

 "engines": {"node": "10.15.3","npm": "6.9.0"}

我在Heroku上部署时遇到了这个错误。

有关更多信息,请查看Heroku支持

使用NVM来管理您正在使用Node.js版本,运行以下命令对我有用:

cd /to/your/project/nvm install lts/dubniumnvm use lts/dubniumyarn upgrade # or `npm install`

我在Windows 10上收到这个错误。结果是一个损坏的漫游配置文件。

npm ERR! node v12.4.0npm ERR! npm  v3.3.12
npm ERR! primordials is not definednpm 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文件夹修复了我的问题。

我也遇到了同样的问题。我尝试过什么,什么对我有用:

  1. 检查Node.jsGulp.js的版本(Node.jsv12和Gulp.js小于v4的组合不起作用)

  2. 我通过以下方式降级了NPM版本:

    sudo NPM install -g nsudo n 10.16.0

它工作得很好。然后按照您的控制台的说明。

降级到Node.js稳定对我来说解决了这个问题,因为它发生在我升级到Node.js12之后:

sudo n 10.16.0

我建议你首先确定NPM安装不是你的问题。然后降级Node.js和Gulp.js版本。我使用Node.js10.16.1和Gulp.js3.9.1。

要降级您的Gulp.js安装,您可以尝试:

npm install gulp@^3.9.1

使用以下命令并安装Node.jsv11.15.0

npm install -g n
sudo n 11.15.0

将解决

引用错误:节点中未定义原始

引用@Terje Norderhaug@Tom Corelis的回答。

npm安装期间使用Python 2(可执行文件python)对我有用:

npm install --python=~/venv/bin/python

使用以下命令安装Node.jsv11.15.0和Gulp.jsv3.9.1:

npm install -g n
sudo n 11.15.0
npm install gulp@^3.9.1npm installnpm rebuild node-sass

它将解决这个问题:

引用错误:节点中未定义原始

对于那些使用纱线的人:

yarn global add nn 11.15.0yarn install # Have to install again

我们在更新依赖于gulp@3.9.1到Node.js12+的遗留项目时遇到了同样的问题。

这些修复使您能够通过将graceful-fs覆盖到版本^4.2.10来将Node.js12+与gulp@3.9.1一起使用。

如果您正在使用pnpm

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

{// your current package.json"pnpm": {"overrides": {"graceful-fs": "^4.2.10"}}}

如果您使用的是YARN V1

纱线v1支持将包解析为定义的版本。您需要将resolutions部分添加到您的package.json

{// Your current package.json contents"resolutions": {"graceful-fs": "^4.2.10"}}

感谢@陈志立用这种方式解决问题。

如果你正在使用npm

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

node -v

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

如果您的版本是v16.14.0或更高版本,那么您可以通过在package.json文件中添加#1部分来覆盖graceful-fs的版本:

{// Your current package.json"overrides": {"graceful-fs": "^4.2.10"}}

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

{// Your current package.json"scripts": {// Your current package.json scripts"preinstall": "npx npm-force-resolutions"},"resolutions": {"graceful-fs": "^4.2.10"}}

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

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

问题的根源

这个问题源于graceful-fs@^3.0.0上的gulp@3.9.1取决于,其中monkeypatchesNode.jsfs模块。

这在11.15版之前一直与Node.js一起使用(这是开发分支的版本,不应该在生产中使用)。

graceful-fs@^4.0.0不再Node.jsfs模块,这使得它与Node.js>11.15兼容(测试并使用版本12,14和16)。

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

当我们使用s3 NPM包时,我们也会遇到这个错误。所以问题出在manya-fs包上——我们需要更新它。它在4.2.3上运行良好。

因此,只需查看它在日志跟踪中显示的NPM包,并相应地将amaya-fs更新到4.2.3。

Gulp 3.9.1不适用于Node v12. x. x,如果你升级到Gulp 4.0.2,你必须使用新的语法(串联和并行)完全改变gulpfile.js。所以你最好的选择是降级到Node.jsv 11. x. x(11.15.0版本对我来说很好),只需在终端中使用以下代码:

nvm install 11.15.0nvm use 11.15.0 # Just in case it didn't automatically select the 11.15.0 as the main node.nvm uninstall 13.1.0npm rebuild node-sass

对于在ADOS CI Build中出于相同原因出现相同错误的任何人:

这是我在寻求帮助时遇到的第一个问题。我有一个ADOS CI构建管道,其中第一个Node.js工具安装程序任务用于安装Node.js.然后npm任务用于安装Gulp.js(npm install-g Gulp)。然后以下Gulp.js任务从gulpfile.js.运行default-任务。

当我将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.js12/13与Gulp.js3.移动到Node.js11工作。

如果保持Node.jsv12,同时使用最新的Gulp^4.0,请按照以下步骤操作:

使用以下命令更新命令行界面(只是为了预防):

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.js4.0引入了series()parallel()方法来组合任务,而不是Gulp 3中使用的数组方法,因此您可能会或可能不会在旧的gulpfile.js脚本中遇到错误。

要了解有关应用这些新功能的更多信息,本网站确实做到了公正:如何迁移到Gulp.js4.0

我通过从添加或删除程序卸载Node.js在Windows 10上修复了这个问题→Node.js.

然后我从https://nodejs.org/download/release/v11.15.0/安装了版本11.15.0

如果您运行的是64位Windows,请选择node-v11.15.0-x64.msi

你有两个选择

  1. 要么升级到Goop 4要么
  2. 降级到较早的Node.js版本。

我通过将Node.js版本从12.14.0降级到10.18.0并重新安装node_modules来解决。

如果您尝试安装semantic-ui并出现以下错误,请尝试从Node.js.org.下载具有最新功能的Node.jsjs(13.5.0)的最新版本

此外,您不应该尝试NPM安装语义,而应该将链接(您可以从cdnjs链接中找到)添加到index.html文件的标头。

GulpNode.js版本11及以上。卸载您当前的Node.js版本并重新安装v10.15.1版本。这是该版本的链接。这对我有帮助,也会解决您的问题。

https://nodejs.org/download/release/v10.15.1/

TL:DR

Gulp3.*不适用于Node.js12.*或更高版本。您必须降级Node.js或升级Gulp。

如果时间不够,请将Node.js降级到v11.*或更低;如果您需要更新的功能,并且有时间可能修复大量损坏的依赖项,请将Gulp升级到4.*或更高版本!

正如其他人已经提到的,Gulp 3.*不支持Node.js12或更高版本,因此您必须将Node版本降级到11.*或更低版本,或将Gulp升级到4.0。

最好的选择最终取决于你有多少时间,因为升级Gulp带来了更干净的Gulpfile的好处,并且内置了对在串联或并联中运行任务的控制,但也依赖于你重写你的Gulpfile到一个新的语法,并且可能(阅读:可能会-参见本评论的结尾)会导致与一些依赖项的冲突。


降级Node.js

这是最简单、最快捷的选项,特别是如果您使用nnvm,因为它们允许您非常快速地安装并在Node.js版本之间切换。

在N上安装Node.js版本

n 10.16.0

在NVM上安装Node.js版本

nvm install 10.16.0

完成此操作后,您需要重新构建您的npm依赖,或者删除您的node_modules文件夹package-lock.json文件并重新安装您的依赖项。尽管如果您只是恢复到先前存在的Node.js版本,您可能会没事。


升级Gulp

如上所述,这是一项更耗时的任务,但从长远来看可能会带来好处。例如,Node.js12现在已经引入了对ES模块的本机支持(在实验标志后面)和Node.js13的完全支持。

您可能需要升级Node.js才能使用它,迫使您升级Gulp。或者您可能只是想要使用Gulp 4的好处,因为它为编写任务提供了更好、更有效的控制。

已经有很多关于这个的文章,所以我不会再详细说明细节,但重申-这不是一个快速的工作。根据你的项目的大小,可能需要一些值得注意的重写,你可能有依赖项中断。如果你时间有限,你应该选择简单地降级Node.js,至少暂时降级。


但是我已经有了Gulp 4,它仍然不起作用!

如果像我一样,你已经在使用Gulp 4+(我使用Gulp4.0.2,最初是在Node.js10上)并且最近升级了(我升级到Node.js13.8.0),那么你是否仍然会遇到这个问题,这可能是因为依赖项依赖于旧版本的Gulp,并且正在陷入管道中。

在我的例子中,gulp-combine-mq是使用Gulp 3.9.*的依赖项。在我的Gulpfile中禁用此任务允许Gulp再次运行。

如果发生这种情况,你有几个选择。你可以,

  1. 如果不是绝对必要,请不要使用插件
  2. 寻找替代方案,
  3. 修复插件

不用说,如果您有几个依赖于旧版本Gulp的插件-特别是如果这些插件对您的应用程序至关重要-这可能会花费大量额外的时间来升级Gulp(因此上面的警告)。

如果发生这种情况,最好只是降级Node.js,至少在发布补丁之前。

我使用Node.jsv12.13.1,所以我已经降级到v10.19.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-updatesncu -unpm install

在大多数情况下,我们将不得不像下面这样更新gulpfile.js

参考古尔普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'));});

解决问题的步骤:

我已经通过以下步骤修复了问题:

  1. 安装NVM
  2. 使用命令nvm install lts/dubnium安装lts/dubnium
  3. 使用命令nvm install lts/dubnium使用lts/dubnium

现在你可以吞咽部署。

这是因为系统中的nodegulp之间存在兼容性问题。降级node或升级gulp将解决此问题。

sudo npm i -g nsudo n 11.15.0

如果仍然不起作用,请尝试删除node_modules文件夹和package-lock.json文件并使用npm i命令再次安装。

在一分钟内修复它:

只需遵循这些步骤。我在Windows 10上,它对我来说非常有效!

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

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

  3. 运行gulp启动项目。

简单而优雅的解决方案

只需遵循这些步骤。它可以完美地与npm install运行多次或安装任何其他模块,甚至将项目发布到艺术工厂。

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

{"dependencies": {"graceful-fs": {"version": "4.2.2"}}}

运行npm install,别担心,它会用一堆内容更新npm-shrinkwrap.json。让我们通过更新package.json脚本选项来摆脱此更新。

"scripts": {"preshrinkwrap": "git checkout -- npm-shrinkwrap.json","postshrinkwrap": "git checkout -- npm-shrinkwrap.json"}

现在您可以运行npm install,您的npm-shrinkwrap.json将完好无损,并将永远工作。

我在安装npm包webshot时遇到了同样的问题。

注意:这是该包的一个已知问题,因为它依赖于幕后的many-fs。

修复:1。将amaya-fs升级到4. x或更高

修复:2。使用webshot-node来代替https://www.npmjs.com/package/webshot-node

查看Node.js版本:

 node --version

检查吞咽版本:

gulp -v

如果Node.js>=12,而吞咽<=3,请执行以下操作之一:

  1. 升级吞咽
sudo npm install -g gulp
  1. 降级节点
sudo npm install -g nsudo n 11.15.0

如何升级(或降级)Node.js使用npm

如果问题不是来自gulp,请检查解压缩 npm模块。自上次更新以来已经大约六年了。它不适用于Node.js>v11。

试试这个:

npm install -g n
sudo n 11.15.0

我尝试了很多建议来解决我的Windows 10机器上的现有项目的这个问题,并最终按照这些步骤来解决它;

  • 从“添加或删除程序”中卸载Node.js。启动一个新的命令提示符并键入gulp -v,然后键入node -v以检查它是否已完全卸载。
  • 下载并安装Node.jsv10.16.0-不是最新的,因为据我所知,最新的节点和口服组合导致了问题。在安装过程中,我没有改变我通常所做的安装路径(C:\Program Files\nodejs)。
  • 打开一个新的命令提示符,转到您的项目目录,您的gulpfile.js并开始吞咽,如图所示。

请注意,有时当我在git分支之间切换时,我可能需要关闭我的Visual Studio并再次以管理员身份运行它才能看到此解决方案再次工作。

据我所知,这个问题是在我为一个新项目安装了最新推荐的Node.js版本(12.18.4)之后开始发生的,当一些FE更改没有反映在现有的Web项目上时,我才意识到这一点。

更新:今天我在我的新PC上设置我的一个现有项目时遇到了同样的问题,我做了同样的步骤+去了我有Gulpfile的目录,然后运行npm install

输入图片描述

由于我的项目使用的是Gulp版本4,因此我必须执行以下操作来解决此问题

  1. 删除文件夹node_modules
  2. 打开package.json并更新版本

问题

更新

这是我正在使用的版本的详细信息

版本

现在运行npm install,然后运行Gulp default。错误应该消失了,你可能会看到:

任务从未定义:仅默认。

我有同样的错误,但它是由不同的问题引起的。

OS: windows 10nodejs version: 15.12.0npm version: 7.6.3

问题的原因是amady-fs包。每当我尝试运行npm时,即使运行npm-v也会触发“ReReference ceError: primordials is not self”。

我尝试运行npm installgraceful-fs@latest,但它仍然不起作用,即使该软件包是最新版本。

是什么帮助了我?

运行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将强制安装新版本无处不在。

希望这对你有用,我花了几个小时才找到如何修复它。

安装Gulp并将Node.js版本添加到package.json文件中,如下所示:

{"dependencies": {"node":  "^10.16.3"}}

对我来说,Diego Fortes的回答只需要一个小小的改变。

如果出现此错误,这是我的工作流程:

  1. npm install

  2. npm install gulp

  3. 创建文件npm-shrinkwrap.json

    {"dependencies": {"graceful-fs": {"version": "4.2.2"}}}
  4. npm install(再次)(不是npm install gulp!非常重要-否则错误会回来)

  5. 吞咽(现在工作)

对于任何遇到这种情况的人,请确认您没有做过我做的愚蠢的事情,并且在一百万年前不小心在您的用户目录中运行了npm init并且忘记清除这些文件。

我在尝试使用@vue-cli创建新项目时发现了这个问题,它最终成为我的用户目录根目录中的一个流氓package.json/package-lock.json文件和node_modules文件夹。

解决方案:从您的用户目录中删除package.jsonpackage-lock.jsonnode_modules,瞧,问题解决了!现在,从额头上取下手掌!

对我来说,使用Series()组合任务后,问题就解决了。

这里的任何答案都没有解决问题。

这个问题只发生在Visual Studio的任务运行资源管理器中,而不是从命令行或PowerShell运行时。

我意识到VS忽略了我用NVM设置的Node版本。

这篇文章给出了答案:配置Visual Studio的任务运行器资源管理器使用哪个NPM?通过将PATH变量设置为比VS中的外部工具更高的优先级,它使用了NVM设置的Node版本,而不是VS安装的版本。输入图片描述

看来你已经将nodejs的版本升级为+12,并且仍然使用Gulp 3.9.1

您可以使用以下解决方案之一

  • 升级你的glup版本为+4
  • 或者简单地使用NVM节点版本管理器在同一台机器上运行多个nodejs版本。
  • 删除package-lock.json或yarn.lock文件。

  • 删除node_modules。

  • 修改package.json文件

    “依赖项”:{响应示例:返回值:1.0.0"}

  • 然后运行npm安装

这将足以解决这个问题。