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

当前回答

升级到4.0.1并确保迁移https://fettblog.eu/gulp-4-parallel-and-series/#migration

其他回答

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

这里有两个选项

要么升级到吞咽4,要么降级到更早的Node.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.js12之后:

sudo n 10.16.0

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

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

修复:1。将优雅fs升级到4.x或更高版本

修复:2。改用webshot节点https://www.npmjs.com/package/webshot-node