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

当前回答

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

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

当我将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。

其他回答

我们在根据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时,它会有所帮助。

检查Node.js版本:

 node --version

检查吞咽版本:

gulp -v

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

升级gulf

sudo npm install -g gulp

降级节点

sudo npm install -g n
sudo n 11.15.0

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

Gulp 3.9.1不适用于Node v12.x.x,如果升级到Gulp 4.0.2,则必须使用新语法(series&parallels)完全更改gulpfile.js。因此,您最好的选择是通过在终端中使用以下代码降级到Node.js v 11.x.x(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

解决问题的步骤:

我已通过以下步骤解决了问题:

安装NVM使用命令nvm install lts/dubnium安装lts/dubinium使用命令nvm install lts/dubnium使用lts/dubinium

现在你可以大口大口地展开了。

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