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

当前回答

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,至少在发布补丁之前。

其他回答

我在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文件夹解决了我的问题。

我使用的是Node.js v12.13.1,所以我已经降级到v10.19.0。之后一切都很顺利。

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

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

这里有两个选项

要么升级到吞咽4,要么降级到更早的Node.js版本。

我也犯了同样的错误。当我更新了所有包,然后在package.json中提到了与本地工作系统相同的Node.js引擎版本和npm版本时,我终于解决了这个问题。

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

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

更多信息,请查看Heroku支持。