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

当前回答

我也面临同样的问题。我所尝试的以及对我有用的:

检查Node.js和Gulp.js的版本(Node.js v12和Gulp.js低于v4的组合不起作用)我通过以下方式降级了NPM版本:sudo NPM安装-g n第10.16.0节

它工作得很好。然后,只需遵循控制台的说明即可。

其他回答

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

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

我在Node.js 12/13和Gulp.js 3上也遇到了一个错误。移动到Node.js 11是有效的。

我们在根据gulp@3.9.1到Node.js 12+。

这些修复使您能够使用Node.js 12+gulp@3.9.1通过将优雅的fs覆盖到版本^4.2.10。

如果您正在使用pnpm

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

{
  "pnpm": {
    "overrides": {
      "graceful-fs": "^4.2.10"
    }
  }
}

如果您使用纱线v1

Yarn v1支持将包解析为定义的版本。您需要在package.json中添加一个resolutions部分:

{
  "resolutions": {
    "graceful-fs": "^4.2.10"
  }
}

感谢@jazd以这种方式解决问题。

如果您正在使用npm

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

node -v

它将返回一个版本号<major><小调><补丁>如18.11.0。

如果您的版本是v16.14.0或更高版本,则可以通过在package.json文件中添加覆盖部分来覆盖曼妙fs的版本:

{
  "overrides": {
    "graceful-fs": "^4.2.10"
  }
}

否则,您需要使用npm-force分辨率作为预安装脚本,以便能够通过如下方式更改package.json文件来覆盖优雅fs的版本:

{
  "scripts": {
    "preinstall": "npx npm-force-resolutions"
  },
  "resolutions": {
    "graceful-fs": "^4.2.10"
  }
}

npm-force解析将在安装完成之前更改package-lock.json文件,以将优雅的fsto设置为所需版本。

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

问题的根源

这个问题源于以下事实:gulp@3.9.1取决于monkeypatchesNode.js fs模块的优雅fs@^3.0.0。

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

优雅的fs@^4.0.0不再对Node.js fs模块进行monkeypatch,这使其与Node.js>11.15兼容(已测试并与版本12、14和16一起使用)。

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

如果在使用最新的gulp^4.0时保持Node.js v12,请执行以下步骤:

使用以下命令更新命令行界面(仅供预防):

npm i gulp-cli -g

添加/更新package.json文件的gulpunderdependencies部分

"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 v12.13.1,所以我已经降级到v10.19.0。之后一切都很顺利。