【问题标题】:How to fix "ReferenceError: primordials is not defined" in Node.js如何修复 Node.js 中的“ReferenceError: primordials is not defined”
【发布时间】:2019-09-19 03:29:22
【问题描述】:

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


【解决方案1】:

我遇到了同样的错误。我怀疑您使用的是 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 的早期版本。

【讨论】:

  • 在 Khaos 上遇到了同样的问题。将节点降级到 v11.15.0 就成功了。
  • 这里使用webshot 节点包的类似问题。我怀疑他们需要先更新一些内容,然后我才能继续使用 Node v12。
  • 我正在使用节点 v12.1.0 和 gulp gulp@4.0.2 但它不起作用
  • 我尝试使用 node v10.x 和 gulp v3.x,然后魔法发生了
  • 我建议使用 Valentin 发布的 npm-shrinkwrap.json 解决方案:stackoverflow.com/a/58394828/2726785,尽管这是公认的解决方案。
【解决方案2】:

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

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

Heroku 上部署时出现此错误。

更多信息,请查看Heroku support

【讨论】:

  • 这是解决方法,而不是修复。有时我们无法将节点版本从 12 降级到 10。
  • 嘿,您只需要确保 Heroku 和本地计算机上的节点引擎版本相同。 :)
【解决方案3】:

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

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

【讨论】:

  • 我总是会回到这个。
  • 请不要使用短暂的 NodeJS 分支(所有奇数版本号,如 9 和 11),使用 NodeJS 10。同时使用 10 代替代码名称。
  • 对于 Windows 使用 nvm-windows
【解决方案4】:

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

【讨论】:

  • 这搞砸了我的整个 npm 依赖项,抱歉。
【解决方案5】:

【讨论】:

  • 做到了,没有骰子。
【解决方案6】:

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

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

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

    sudo NPM install -g n
    sudo n 10.16.0
    

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

【讨论】:

  • 它对我有用,这个错误消失了; ^ ReferenceError: primordials is not defined 谢谢!!!
【解决方案7】:

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

sudo n 10.16.0

【讨论】:

  • 如果你尝试这个并得到错误:'sudo: n: command not found',请务必先安装n:'npm install -g n'
  • 在 Windows 10(64 位)上试过这个并得到:- C:\react-script-editor>npm install -g n npm ERR!代码 EBADPLATFORM npm 错误! notsup n@6.1.0 不支持的平台:想要 {"os":"!win32","arch":"any"}(当前:{"os":"win32","arch":"x64"}) npm 错误! notsup 有效操作系统:!win32 npm ERR! notsup 有效拱门:任何 npm 错误! notsup 实际操作系统:win32 npm ERR! notsup 实际拱门:x64
  • 降级不是一种选择。我们需要修复而不是创可贴解决方案。
【解决方案8】:

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

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

npm install gulp@^3.9.1

【讨论】:

    【解决方案9】:

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

    npm install -g n
    
    sudo n 11.15.0
    

    会解决

    ReferenceError: primordials 未在节点中定义

    来自@Terje Norderhaug @Tom Corelis 的回答。

    【讨论】:

    • 为我工作!优秀的答案。几个小时以来一直在尝试解决这个问题。
    • 完美!为我工作。
    • 请不要使用奇怪的 NodeJS 版本。这些是短暂的发布。使用 NodeJS 10。
    • 太棒了!为我工作。
    • npm install -g n 在我的(windows 64)机器上产生错误:npm ERR! notsup 不支持 n@6.1.3 的平台:想要 {"os":"!win32","arch":"any"}(当前:{"os":"win32","arch":"x64"})
    【解决方案10】:

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

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

    【讨论】:

      【解决方案11】:

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

      【讨论】:

      • 为我工作,必须遵循所有步骤。 ?
      • 请不要使用短暂的 NodeJS 分支(所有奇数版本号,如 9 和 11),请使用 NodeJS 10。
      • 说真的,请按照所有步骤操作。
      • n in sudo n 11.15.0 应该是在第一步中安装的,npm install -g n。那是什么?还能用吗?
      • 如果您在运行npm install gulp@^3.9.1 时遇到权限问题,请按照本指南docs.npmjs.com/… 中的步骤操作
      【解决方案12】:

      对于正在使用Yarn的人:

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

      【讨论】:

      • 请不要使用短暂的 NodeJS 分支(所有奇数版本号,如 9 和 11),请使用 NodeJS 10。
      【解决方案13】:

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

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

      如果你使用的是 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

      使用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 将在完成install 之前更改package-lock.json 文件以将graceful-fs 设置为所需的版本。

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

      问题的根源

      这个问题源于 gulp@3.9.1 dependsgraceful-fs@^3.0.0 上的猴子补丁 Node.js fs 模块。

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

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

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

      【讨论】:

      • 哇——太棒了!我不想回滚我的节点安装,所以这是一个完美的解决方案。
      • 这个解决方案非常适合这种特殊情况 - 它应该是公认的答案。
      • @Valentin 当我运行npm install 以重新生成package-lock.jsonnpm-shrinkwrap.json 时,似乎无法锁定此依赖项。我重新运行npm install --no-save 后,生成的package-lock.json 仍然指示npm 安装缺少的依赖项。
      • 如果您使用 yarn (v1),您可以将其添加到您的 package.json 中的分辨率中以实现相同的目的 - "**/graceful-fs": "^4.0.0"
      • 为 graceful-fs 4.2.3 添加分辨率,运行 npx npm-force-resolutions 然后运行 ​​npm install 解决了我的问题。
      【解决方案14】:

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

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

      【讨论】:

        【解决方案15】:

        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
        

        【讨论】:

        • 在此之后我得到错误:“/c/Users/User/AppData/Roaming/npm/node: line 8: C:\Users\User\AppData\Roaming\npm/node_modules/node/ bin/node: 没有这样的文件或目录"
        【解决方案16】:

        对于在 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。

        【讨论】:

          【解决方案17】:

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

          【讨论】:

            【解决方案18】:

            如果在使用最新的 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 脚本。

            要了解有关应用这些新功能的更多信息,this site 确实做到了:How to Migrate to Gulp.js 4.0

            【讨论】:

            • gulp-cli 有什么用?我按照您的步骤进行操作,最初一切正常;但后来我卸载了gulp-cli(因为我没有看到它在哪里被使用),一切仍然有效。不过,感谢您的回答,因为我已经使用节点 v12.9.1 和 Gulp 4.0.2 再次启动并运行!
            • 我很高兴它有帮助。 gulp-cli 是命令行实用程序。它确保正确安装 gulp 正如您在此处的 gulp 安装步骤中看到的那样:gulpjs.com/docs/en/getting-started/quick-start
            • 喜欢这个!成功了
            【解决方案19】:

            我通过从 添加或删除程序 → Node.js 卸载 Node.js,在 Windows 10 上解决了这个问题。

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

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

            【讨论】:

              【解决方案20】:

              这里有两种选择

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

              【讨论】:

                【解决方案21】:

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

                【讨论】:

                  【解决方案22】:

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

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

                  【讨论】:

                  • 代码示例将是一个很好的补充。
                  • “以下错误”指的是什么?
                  【解决方案23】:

                  Gulp 对 Node.js 版本 11 及更高版本产生了问题。卸载当前的 Node.js 版本并重新安装 v10.15.1 版本。这是该版本的链接。这对我有帮助,也能解决你的问题。

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

                  【讨论】:

                    【解决方案24】:

                    TL:DR

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

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

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

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


                    降级 Node.js

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


                    但是我已经有了 Gulp 4,还是不行!

                    如果你像我一样已经在使用 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,至少在可以发布补丁之前。

                    【讨论】:

                    • 对我来说,这也是我的情况。我使用的是 Gulp 4,但一个旧的 gulp 插件在内部依赖于旧的优雅 fs 版本。可以使用npm ls graceful-fs 找到罪魁祸首——使用graceful-fs 且版本低于4 的软件包将导致此问题。从 gulpfile 中删除它,使用替代方案或升级它来解决问题。
                    【解决方案25】:

                    我使用的是 Node.js v12.13.1,因此我已降级到 v10.19.0。之后效果很好。

                    【讨论】:

                      【解决方案26】:

                      这个错误是由于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'));
                          }
                      );
                      

                      【讨论】:

                      • 如果您没有复杂的 gulp 文件,这是一个很好的解决方案。就我而言,我只需要为每个 gulpfile.js 修改两行代码。感谢您提供简短的迁移指南!
                      【解决方案27】:

                      解决问题的步骤:

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

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

                      现在你可以 gulp 部署了。

                      【讨论】:

                      • 这是对@kevink 的answer 的不准确的欺骗
                      【解决方案28】:

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

                      sudo npm i -g n
                      sudo n 11.15.0
                      

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

                      【讨论】:

                        【解决方案29】:

                        一分钟搞定:

                        只需关注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 启动项目。

                        【讨论】:

                        • 在 win 10 / WSL 下像魅力一样工作 - 谢谢!
                        • 在 Ubuntu 中也表现得非常出色。
                        • 在 Win 10 pro 上运行良好!谢谢:)
                        • 为我在 OSX Catalina 上工作?
                        • 我遇到了一个问题,我已经运行了npm install,然后添加了npm-shrinkwrap.json 文件并再次运行npm install。它没有用,所以我不得不从头开始做这个项目,只有在我添加了npm-shrinkwrap.json 之后,我才运行npm install,它才起作用。希望这是有道理的。
                        【解决方案30】:

                        简单优雅的解决方案

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

                        在您拥有 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-shrinkwrap.json,谢谢!
                        • 很高兴看到我关于堆栈溢出的第一篇文章帮助你成为第一人 @dblazeski :)
                        • @saumilsdk 当我之后安装另一个模块时,例如npm i bla,它只安装了graceful-fs + 新的,但是所有其他模块都丢失了,对你来说是一样的吗?
                        • @NthDegree 不,我没有看到这种情况发生。您应该会在 package.config 文件中看到一些变化。
                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 2020-10-24
                        • 2021-02-05
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2016-11-22
                        • 2013-08-14
                        相关资源
                        最近更新 更多