How to fix "ReferenceError: primordials is not defined" in Node.js

How to fix "ReferenceError: primordials is not defined" in Node.js

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

我以前试过这个gulp sass-watch:

npm -g install gulp-cli

我遇到了同样的错误。我怀疑您使用的是 Node.js 12 和 Gulp.js 3。该组合不起作用:Gulp.js 3 is broken on Node.js 12 #2324

1 月以前的解决方法也不起作用:After update to Node.js 11.0.0 running Gulp.js exits with 'ReferenceError: internalBinding is not defined' #2246

解决方案:升级到 Gulp.js 4 或降级到 Node.js 的早期版本。

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

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

我在 Heroku 上部署时遇到此错误。

有关更多信息,请查看 Heroku support

使用 NVM 管理您正在使用的 Node.js 版本,运行 以下命令对我有用:

cd /to/your/project/
nvm install lts/dubnium
nvm use lts/dubnium
yarn upgrade # or `npm install`

我在 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.0.1 并确保迁移 https://fettblog.eu/gulp-4-parallel-and-series/#migration

我遇到了同样的问题。我尝试过的和对我有用的:

  1. 检查 Node.jsGulp.js 的版本(Node.js v12 和 Gulp.js 小于 v4 不起作用)

  2. 我将 NPM 版本降级为:

    sudo NPM install -g n
    sudo n 10.16.0
    

它运行良好。然后只需按照控制台的说明操作即可。

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

之后
sudo n 10.16.0

我建议您首先确保 NPM install 不是您的问题。然后你降级 Node.js 和 Gulp.js 版本。我使用了 Node.js 10.16.1 和 Gulp.js 3.9.1.

要降级 Gulp.js 安装,您可以尝试:

npm install gulp@^3.9.1

使用以下命令并安装 Node.js v11.15.0:

npm install -g n

sudo n 11.15.0

会解决

ReferenceError: primordials is not defined in node

引用自@Terje Norderhaug @Tom Corelis 的回答。

npm 安装期间使用 Python 2(可执行文件 python)对我有效:

npm install --python=~/venv/bin/python

使用以下命令安装 Node.js v11.15.0 和 Gulp.js v3.9.1:

npm install -g n

sudo n 11.15.0

npm install gulp@^3.9.1
npm install
npm rebuild node-sass

它将解决这个问题:

ReferenceError: primordials is not defined in node

对于正在使用 Yarn 的用户:

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

我们在将依赖 gulp@3.9.1 的遗留项目更新为 Node.js 12+ 时遇到了同样的问题。

这些修复使您能够通过将 graceful-fs 覆盖到版本 ^4.2.9.

来将 Node.js 12+ 与 gulp@3.9.1 一起使用

如果您使用的是 yarn v1

纱线 v1 supports resolving a package to a defined version。 您需要将 resolutions 部分添加到 package.json:

{
  // Your current package.json contents
  "resolutions": {
    "graceful-fs": "^4.2.9"
  }
}

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

如果您使用的是 npm >= 8.3.0

npm@^8.3.0 使您能够覆盖项目依赖包的版本。为此,您应该在 package.json:

中添加 an overrides section
{
  // Your current package.json
  "overrides": {
    "graceful-fs": "^4.2.9"
  }
}

如果您使用的 npm < 8.3.0

使用 npm-force-resolutions 作为预安装脚本,您可以获得与 yarn v1 类似的结果。您需要这样修改您的package.json:

{
  // Your current package.json
  "scripts": {
    // Your current package.json scripts
    "preinstall": "npx npm-force-resolutions"
  },
  "resolutions": {
    "graceful-fs": "^4.2.9"
  }
}

npm-force-resolutions 将更改 package-lock.json 文件以在 install 完成之前将 graceful-fs 设置为所需的版本。

如果您在项目中使用自定义 .npmrc 文件并且它包含代理或自定义注册表,您可能需要将 npx npm-force-resolutions 更改为 npx --userconfig .npmrc npm-force-resolutions,因为截至目前, npx 默认不使用当前文件夹 .npmrc 文件。

问题的根源

这个问题源于 gulp@3.9.1 dependsgraceful-fs@^3.0.0 which monkeypatches Node.js fs 模块上。

在版本 11.15 之前,它曾与 Node.js 一起使用(这是来自开发分支的 version,不应在生产中使用)。

graceful-fs@^4.0.0 不再使用 monkeypatch Node.js fs 模块,这使其与 Node.js > 11.15 兼容(已测试并可与版本 12 和 14 一起使用)。

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

我们在使用 s3 NPM 包时也会遇到这个错误。所以问题出在 graceful-fs 包上——我们需要更新它。它在 4.2.3 上工作正常。

所以只需查看它在日志跟踪中显示的 NPM 包,并相应地将 graceful-fs 更新到 4.2.3。

Gulp 3.9.1 不适用于 Node v12.x.x,如果升级到 Gulp 4.0.2,则必须完全更改 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

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

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

当我更改 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.

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

如果在使用最新的 gulp ^4.0 的同时保留 Node.js v12,请按照以下步骤操作:

更新命令行界面(仅作为预防措施)使用:

npm i gulp-cli -g

Add/Update package.json 文件

的依赖部分下的 gulp
"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()方法来组合任务,而不是[=53=中使用的数组方法] 3,因此您可能会或可能不会在旧 gulpfile.js 脚本中遇到错误。

要了解有关应用这些新功能的更多信息,this site have really done justice to it: How to Migrate to Gulp.js 4.0

我在 Windows 10 上通过从 添加或删除程序 卸载 Node.js → Node.js.

解决了这个问题

然后我从https://nodejs.org/download/release/v11.15.0/

安装了11.15.0版本

如果您是 运行 Windows 64 位,请选择 node-v11.15.0-x64.msi

这里有两个选择

  1. 要么升级到 gulp 4,要么升级到
  2. 降级到更早的 Node.js 版本。

我通过将 Node.js 版本从 12.14.0 降级到 10.18.0 并重新安装 node_modules.

来解决

如果您在尝试安装 semantic-ui 时出现以下错误,请尝试从 Node.js 下载具有最新功能的 Node.js js(13.5.0) 的最新版本.org.

此外,与其尝试 NPM 安装语义,不如将 link(您可以从 cdnjs link 中找到)添加到 [=12] 的 header =] 文件.

Gulp 与 Node.js 版本 11 及更高版本有关。卸载当前的 Node.js 版本并重新安装 v10.15.1 版本。这是该版本的 link。这对我有帮助,它也会解决你的问题。

https://nodejs.org/download/release/v10.15.1/

TL:DR

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

If you are short on time, downgrade Node.js to v11.* or below; if you need newer features, and have time to possibly fix a load of broken dependencies, upgrade Gulp to 4.* or above!

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

最佳选择最终取决于您有多少时间,因为升级 Gulp 带来了更清洁的 gulpfile 和对在 series or parallel 中执行任务 运行 的内置控制的好处,但是还依赖于您将 gulpfile 重写为新语法,并且 可能 (阅读:可能会 - 请参阅本评论的结尾)导致与某些依赖项发生冲突。


降级Node.js

这是最简单快捷的选择。特别是如果您使用 n or nvm,因为这些允许您非常快速地安装和在 Node.js 版本之间切换。

正在 N

上安装 Node.js 版本
n 10.16.0

正在 NVM 上安装 Node.js 版本

nvm install 10.16.0

完成此操作后,您可能需要重建您的 npm dependencies 或者删除您的 node_modules 文件夹 你的 package-lock.json 文件并重新安装你的依赖项。不过,如果您只是恢复到先前存在的 Node.js 版本,您应该没问题。


正在升级Gulp

如上所述,这是一项更耗时的任务,但从长远来看可能会带来好处 运行。例如,Node.js 12 现在引入了对 ES 模块的原生支持(在实验性标志之后),并在 Node.js 13 中引入了全面支持。

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

已经有很多关于这方面的文章,所以我不会进一步详细说明细节,但要重申 - 这不是一件容易的事。根据项目的大小,可能需要进行一些显着的重写,并且您可能会破坏依赖关系。如果时间紧迫,您应该选择简单地降级 Node.js,至少暂时如此。


可是我已经有Gulp4个了,还是不行!

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

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

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

  1. 如果不是绝对必要,请不要使用插件
  2. 寻找替代方案,
  3. 修复插件

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

如果发生这种情况,最好只降级 Node.js,至少要等到可以发布补丁。

我使用的是 Node.js v12.13.1,因此我已降级到 v10.19.0。之后一切正常。

这个错误是因为新版本Node.js(12)和旧版本Gulp(小于 4)。

不建议降级 Node.js 和其他依赖项。我通过更新 package.json 文件解决了这个问题,获取了所有依赖项的最新版本。为此,我使用 npm-check-updates。它是一个使用所有依赖项的最新版本更新 package.json 的模块。

参考https://www.npmjs.com/package/npm-check-updates

npm i -g npm-check-updates
ncu -u
npm install

在大多数情况下,我们必须像下面这样更新 gulpfile.js

参考:Gulp 4: The new task execution system - gulp.parallel and gulp.series, Migration

之前:

gulp.task(
    'sass', function () {
        return gulp.src([sourcePath + '/sass/**/*.scss', "!" + sourcePath + "/sass/**/_*.scss"])

            ....
    }
);

Other configuration...

gulp.task(
    'watch', function () {
        gulp.watch(sourcePath + '/sass/**/*.scss', ['sass']);
    }
);

之后:

gulp.task('sass', gulp.series(function(done) {
    return gulp.src([sourcePath + '/sass/**/*.scss', "!" + sourcePath + "/sass/**/_*.scss"])

            ...

    done();
}));

Other config...

gulp.task(
    'watch', function () {
        gulp.watch(sourcePath + '/sass/**/*.scss', gulp.series('sass'));
    }
);

解决问题的步骤:

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

  1. 正在安装 NVM
  2. 已使用命令 nvm install lts/dubnium
  3. 安装 lts/dubnium
  4. 使用 lts/dubnium 使用命令 nvm install lts/dubnium

现在你可以gulp部署了。

这是因为您的系统中 nodegulp 之间存在兼容性问题。降级 node 或升级 gulp 将解决此问题。

sudo npm i -g n
sudo n 11.15.0

尝试删除 node_modules 文件夹和 package-lock.json 文件,如果仍然无法使用,请使用 npm i 命令重新安装。

一分钟搞定:

关注these steps即可。我在 Windows 10,它非常适合我!

  1. 在您 package.json 所在的同一目录中创建一个包含以下内容的 npm-shrinkwrap.json 文件:

        {
          "dependencies": {
            "graceful-fs": {
                "version": "4.2.2"
             }
          }
        }
    
  2. 运行npm install,别担心,它会更新npm-shrinkwrap.json一堆内容。

  3. 运行 gulp 开始项目。

Simple and elegant solution

只需按照以下步骤操作即可。它与 npm install 运行ning 多次或安装任何其他模块甚至将项目发布到 artifactory 完美配合。

在您 package.json 所在的同一目录中,创建一个包含以下内容的 npm-shrinkwrap.json 文件:

{
  "dependencies": {
    "graceful-fs": {
        "version": "4.2.2"
     }
  }
}

运行 npm install,不用担心,它会用一堆内容更新 npm-shrinkwrap.json。让我们通过更新 package.json 脚本选项来摆脱这个更新。

"scripts": {
    "preshrinkwrap": "git checkout -- npm-shrinkwrap.json",
    "postshrinkwrap": "git checkout -- npm-shrinkwrap.json"
}

现在您可以 运行 npm install 并且您的 npm-shrinkwrap.json 将完好无损并永远工作。

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

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

修复:1. 将 graceful-fs 升级到 4.x 或更高

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

检查Node.js版本:

 node --version

检查gulp版本:

gulp -v

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

  1. 升级gulp
sudo npm install -g gulp
  1. 降级节点
sudo npm install -g n
sudo n 11.15.0

How to Upgrade (or Downgrade) Node.js Using npm

如果问题不是来自 gulp,则检查 unzip npm 模块。自上次更新以来已经过去了大约六年。它不适用于 Node.js > v11.

试试这个:

npm install -g n

sudo n 11.15.0

我已经尝试了很多建议来解决我 Windows 10 机器上现有项目的这个问题,并最终按照这些步骤解决了它;

  • 从“添加或删除程序”中卸载 Node.js。启动一个新的命令提示符并键入 gulp -v,然后键入 node -v 以检查它是否已完全卸载。
  • 下载并安装 Node.js v10.16.0 - 不是最新的,因为据我所知,最新的节点和 gulp 组合是导致问题的原因。在安装过程中我没有改变我通常做的安装路径(C:\Program Files\nodejs).
  • 打开一个新的命令提示符,转到您的项目目录,您在其中获得了 gulpfile.js 并启动 gulp,如图所示。

请注意,有时当我在 git 分支之间切换时,我可能需要再次以管理员身份关闭我的 Visual Studio 和 运行 它才能看到此解决方案再次运行。

据我所知,这个问题是在我为一个新项目安装了 Node.js 的最新推荐版本 (12.18.4) 之后才开始发生的,我只是在一些 FE 更改没有反映出来时才意识到这一点在现有的网络项目上。

更新:今天我在我的新 PC 上设置我现有的项目之一时遇到了同样的问题,我做了同样的步骤 + 转到我有 gulp 文件的目录,然后 运行 npm install.

由于我的项目使用的是 gulp 版本 4,因此我必须执行以下操作来解决此问题

  1. 删除文件夹node_modules
  2. 打开package.json并更新版本

这是我使用的版本的详细信息

现在 运行 npm install 然后 运行 gulp 默认。错误应该消失,您可能会看到:

Task never defined: default only.

我遇到了同样的错误,但它是由不同的问题引起的。

OS: windows 10
nodejs version: 15.12.0
npm version: 7.6.3

问题的原因是 graceful-fs 包。 每当我尝试 运行 npm 时,甚至 运行ning npm-v 都会触发“ReferenceError: primordials is not defined”。

我尝试了 运行ning npm install graceful-fs@latest,但它仍然没有用,即使包是最新版本。

那是什么帮助了我?

运行 npm ls graceful-fs

这样你会找到所有 graceful-fs 依赖的包以及它的版本。在我的例子中,它主要是 3.0 版,即使我已经安装了 4.2.6

那么怎么解决呢?

打开 npm-shrinkwrap.json(不确定 packages-lock.json)并更改对 graceful-fs 的搜索 - 您会看到它在一些地方有旧版本。将其替换为 ^4.2.6(或更新版本)。

然后npm audit fix --force这将在所有地方强制安装较新的版本。

希望这对你有用,我花了几个小时才弄清楚如何修复它。

安装 gulp 并将您的 Node.js 版本添加到 package.json 文件中,如下所示:

{
  "dependencies": {
    "node":  "^10.16.3"
  }
}

对我来说, 只需稍作改动即可。

如果出现此错误,这是我的工作流程:

  1. npm install

  2. npm install gulp

  3. 创建文件npm-shrinkwrap.json
    {
      "dependencies": {
        "graceful-fs": {
            "version": "4.2.2"
         }
      }
    }
    
  4. npm install (again) (不是 npm install gulp again!非常重要 - 否则错误会回来)

  5. gulp(正在工作)

对于任何 运行 感兴趣的人,请确认你没有做过我做过的傻事,不小心 运行 npm init 一百万年前在你的用户目录中忘记了清除这些文件。

我在尝试使用 @vue-cli 创建一个新项目时发现了这个问题,它最终成为一个流氓 package.json / package-lock.json 文件和 node_modules 文件夹我的用户目录的根目录。

解决方案:从您的用户目录中删除 package.jsonpackage-lock.jsonnode_modules,瞧,问题解决了!现在,把手掌从额头上移开!

对我来说,在使用 series() 组合任务后问题就解决了。

这里的任何一个答案都没有解决问题。

我的问题仅在 Visual Studio 的 Task Runner Explorer 中发生,而在 运行 从命令行或 PowerShell 中时未发生。

我意识到 VS 忽略了我用 NVM 设置的节点版本。

这个post给出了答案:通过将PATH变量设置为比VS中的外部工具更高的优先级,它使用了Node版本由 NVM 设置,而不是随 VS 安装的版本。

您似乎已经将 nodejs 的版本升级到 +12,并且仍在使用 gulp 3.9.1

您可以使用以下解决方案之一

  • 升级你的 glup 版本为 +4
  • 或者简单地使用 NVM 节点版本管理器 在同一台机器上 运行 多个 nodejs 版本。