我已经通过“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

我在大口大口看之前已经试过了:

npm -g install gulp-cli

当前回答

当我们使用s3 NPM包时,也会出现此错误。所以问题出在优雅的fs包上——我们需要更新它。它在4.2.3中运行良好。

所以只需查看日志跟踪中显示的NPM包,并根据4.2.3更新优雅的fs。

其他回答

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

sudo n 10.16.0

对于使用纱线的用户:

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

TL:博士

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

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

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

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


降级Node.js

这是最简单快捷的选择。特别是如果您使用n或nvm,因为它们允许您快速安装并在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.js 12现在引入了对ES模块的本地支持(在实验标志后面),并在Node.js 13中提供了完全支持。

您可能需要升级Node.js才能使用它,从而迫使您升级Gulp。或者你可能只是想要使用Gulp 4的好处,因为它可以更好、更有效地控制写作任务。

关于这一点,已经有很多文章了,所以我不会再详细说明细节,但要重申,这不是一项快速的工作。根据项目的大小,可能需要一些显著的重写,并且可能会有依赖关系中断。如果时间紧迫,您应该选择简单地降级Node.js,至少暂时如此。


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

如果像我一样,您已经在使用Gulp 4+(我使用的是Gulp 4.0.2,最初在Node.js 10上),并且最近升级了(我升级到Node.js 13.8.0),那么您仍然会遇到问题,这可能是因为依赖项依赖于旧版本的Gulp,而这正被管道所捕获。

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

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

如果不是绝对必要的话,不使用插件寻找替代方案,修复插件

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

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

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

我在尝试使用@vue-cli创建一个新项目时发现了这个问题,结果是用户目录根目录中的一个rogue package.json/package-lock.json文件和node_modules文件夹。

解决方案:从用户目录中删除package.json、package-lock.json和node_modules,问题解决了!现在,把手掌从前额上移开!

当我们使用s3 NPM包时,也会出现此错误。所以问题出在优雅的fs包上——我们需要更新它。它在4.2.3中运行良好。

所以只需查看日志跟踪中显示的NPM包,并根据4.2.3更新优雅的fs。