繁体   English   中英

如何修复 Node.js 中的“ReferenceError:primordials is not defined”

[英]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

我遇到了同样的错误。 I suspect you're using Node.js 12 and Gulp.js 3. That combination does not work: Gulp.js 3 is broken on Node.js 12 #2324

1 月以前的解决方法也不起作用:更新到 Node.js 11.0.0 后,运行 Gulp.js 退出并出现“ReferenceError:internalBinding is not defined”#2246

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

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

这些修复使您能够通过将graceful-fs覆盖到版本^4.2.9来使用 Node.js 12+ 和gulp@3.9.1

如果您使用的是纱线 v1

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

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

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

如果您使用的是 npm >= 8.3.0

npm@^8.3.0使您能够覆盖项目依赖项的 package 版本。 为此,您应该在 package.json 中添加overrides部分

{
  // 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- npx npm-force-resolutions更改为npx --userconfig.npmrc npm-force-resolutions因为到目前为止,默认情况下, .npmrc npx

问题的根源

这个问题源于gulp@3.9.1依赖graceful-fs@^3.0.0的猴子补丁 Node.js fs模块的事实。

这曾经与 Node.js 一起工作,直到版本 11.15(这是来自开发分支的版本,不应在生产中使用)。

graceful-fs@^4.0.0不再对 Node.js fs模块进行猴子补丁,这使其与 Node.js > 11.15 兼容(测试并使用版本 12 和 14)。

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

一分钟搞定:

只需按照这些步骤 我在 Windows 10 上,它非常适合我

  1. 在您拥有package.json的同一目录中,创建一个npm-shrinkwrap.json shrinkwrap.json 文件,其内容如下:

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

  3. 运行gulp启动项目。

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

npm install -g n

sudo n 11.15.0

将解决

ReferenceError: primordials 未在节点中定义

参考@Terje Norderhaug @Tom Corelis 的答案。

使用以下命令安装 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 未在节点中定义

对我来说, Diego Fortes 的回答只需稍加改动即可。

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

  1. npm install

  2. npm install gulp

  3. 创建文件npm-shrinkwrap.json

    { "dependencies": { "graceful-fs": { "version": "4.2.2" } } }
  4. npm install (再次)(不是npm install gulp非常重要 - 否则错误会回来)

  5. gulp(正在工作)

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

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

TL:博士

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

如果时间紧迫,请将 Node.js 降级到 v11.* 或以下; 如果您需要更新的功能,并且有时间修复大量损坏的依赖项,请将 Gulp 升级到 4.* 或更高版本

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

最好的选择最终取决于你有多少时间,因为升级 Gulp 带来了更干净的 gulpfile 和对任务串行或并行运行的内置控制的好处,但也依赖于你将 gulpfile 重写为新语法,并且可能(阅读:可能会 - 看到此评论的结尾)导致与某些依赖项发生冲突。


降级 Node.js

这是最简单和最快的选择。 特别是如果您使用nnvm ,因为它们允许您非常快速地安装和在 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了,还是不行

If, like me, you are already using Gulp 4+ (I was using Gulp 4.0.2 , originally on Node.js 10) and have recently upgraded (I upgraded to Node.js 13.8.0) are you are still getting the issue, it may be因为依赖项依赖于旧版本的 Gulp,而这正陷入困境。

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

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

  1. Go 没有插件,如果不是绝对必要的话
  2. 寻找替代方案,
  3. 修复插件

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

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

简单优雅的解决方案

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

在您拥有 package.json 的同一目录中,创建一个npm- shrinkwrap.json 文件,其内容如下:

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

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

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

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

Gulp 3.9.1 不适用于 Node v12.xx,如果升级到 Gulp 4.0.2,则必须使用新语法(系列和并行)完全更改 gulpfile.js。 所以你最好的选择是通过在终端中简单地使用以下代码来降级到 Node.js v 11.xx(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

我有同样的错误。 I finally fixed that when I updated all packages and then mentioned the same Node.js engine version and npm version in package.json as it is in my local working system.

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

Heroku上部署时出现此错误。

有关更多信息,请查看Heroku 支持

查看 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

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

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

尝试这个:

npm install -g n

sudo n 11.15.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:新的任务执行系统——gulp.parallel和gulp.series,迁移

前:

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'));
    }
);

我的问题仅出现在 Visual Studio 的Task Runner Explorer中,而不是从命令行或 PowerShell 运行时。

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

这篇文章给出了答案: Configure which NPM is used by Visual Studio's Task Runner Explorer? 通过将PATH变量设置为比 VS 中的外部工具更高的优先级,它使用了 NVM 设置的 Node 版本,而不是 VS 安装的版本。 在此处输入图像描述

我遇到了同样的问题。 我尝试了什么,什么对我有用:

  1. 检查Node.jsGulp.js的版本(Node.js v12 和 ZF5700A2964CF2DA0B4D90F7 的组合不工作)

  2. 我通过以下方式降级了 NPM 版本:

     sudo NPM install -gn sudo n 10.16.0

它工作得很好。 然后只需按照控制台的说明进行操作即可。

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

sudo n 10.16.0

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

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

使用以下命令更新命令行界面(只是为了预防起见):

npm i gulp-cli -g

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()方法来组合任务,而不是 Gulp 3 中使用的数组方法,因此您可能会或可能不会在旧的gulpfile.js脚本中遇到错误。

要了解有关应用这些新功能的更多信息,此站点确实做到了:如何迁移到 Gulp.js 4.0

我通过从添加或删除程序→ Node.js 卸载 Node.js 在 Windows 10 上修复了此问题。

然后我从https://nodejs.org/download/release/v11.15.0/安装了 11.15.0 版本

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

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

此外,与其尝试 NPM 安装语义,不如将链接(可以从cdnjs 链接中找到)添加到index.html文件的 header 中。

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

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

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

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

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

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

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

在此处输入图像描述

安装 gulp 并将您的 Node.js 版本添加到package.Z466DEEC76ECDF5FCA65​​D38571F6324文件中

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

看来您已将 nodejs 的版本升级为 +12 并且仍在使用 gulp 3.9.1

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

  • 将您的 gup 版本升级为 +4
  • 或者干脆你使用NVM Node version Manager 在同一台机器上运行多个 nodejs 版本。

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

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

问题的原因是优雅-fs package。 每当我尝试运行 npm 时,即使运行 npm-v 也会触发“ReferenceError: primordials is not defined”。

我尝试运行 npm install graceful-fs@latest,但它仍然不起作用,即使 package 是最新版本。

那么是什么帮助了我呢?

运行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将在任何地方强制安装较新版本。

希望这对您有用,我花了几个小时才找到解决方法。

  • 删除 package-lock.json 或 yarn.lock 文件。

  • 然后删除 node_modules。

  • 之后修改 package.json 文件-

    “依赖项”:{“gulp”:“^4.0.0”}

  • 然后运行- npm install

解决这个问题就足够了。

对于那些使用Yarn的人:

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

你在这里有两个选择

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

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

sudo npm i -g n
sudo n 11.15.0

如果仍然无法正常工作,请尝试删除node_modules文件夹和package-lock.json文件并使用npm i命令再次安装。

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

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

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

修复:2.使用 webshot-node 代替https://www.npmjs.com/package/webshot-node

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

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

问题

更新

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

版本

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

任务从未定义:仅默认值。

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

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

卸载节点,然后使用给定的链接重新安装它。 https://nodejs.org/en/download/

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

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

npm install gulp@^3.9.1

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

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

当我们使用 s3 NPM package 时,我们也会收到此错误。 所以问题在于优雅的 fs package - 我们需要更新它。 它在 4.2.3 上运行良好。

因此,只需查看它在日志跟踪中显示的 NPM package 并相应地将优雅 fs 更新为 4.2.3。

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

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

当我更改 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 有效。

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

我使用的是 Node.js v12.13.1,所以我已经降级到 v10.19.0。 之后它工作得很好。

解决问题的步骤:

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

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

现在您可以部署 gulp。

对于遇到此问题的任何人,请确认您没有做过我做过的愚蠢的事情,并且在一百万年前不小心在您的用户目录中运行了npm init并忘记清除这些文件。

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

解决方案:从您的用户目录中删除package.jsonpackage-lock.jsonnode_modules ,瞧,问题解决了,现在从 forehead 中删除手掌

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM