如何修复ReferenceError:节点中未定义primordials


363

我已经通过npm install安装了节点模块,然后尝试在命令提示符下执行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

Answers:


463

我遇到了同样的错误。我怀疑您正在使用节点12和gulp3。该组合不起作用:https : //github.com/gulpjs/gulp/issues/2324

从1月开始的以前的解决方法也不起作用:https : //github.com/gulpjs/gulp/issues/2246

解决方案:升级到gulp 4或降级到较早的节点。


20
Khaos也遇到了同样的问题。将节点降级到v11.15.0可以达到目的。
泰耶Norderhaug

4
这里使用webshot节点包出现类似问题。我怀疑他们需要先更新一些内容,然后才能继续使用Node v12。
雅各布·莫里森

69
我正在使用node v12.1.0和gulp,gulp@4.0.2但无法正常工作
最高通缉

32
我尝试了node v10.xv3.xgulp,然后魔术发生了
kuldipem

12
我建议使用Valentin发布的npm-shrinkwrap.json解决方案:stackoverflow.com/a/58394828/2726785,即使这是公认的解决方案。
Erik Hansen

245

根据gulp@3.9.1Node.js 12 更新旧项目时,我们遇到了相同的问题。

这些修复程序使您可以gulp@3.9.1通过覆盖graceful-fsversion 来使用Node.js 12 4.2.3

如果您的项目没有积极进行,而您使用npm

创建一个包含以下内容的npm-shrinkwrap.json文件

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

提交此npm-shrinkwrap.json文件。然后执行npm install将更新npm-shrinkwrap.json文件。

不幸的是,如果您npm install再次使用此解决方案,将无法再使用。请参阅下面的其他解决方案。

如果您的项目正在积极开发中,并且您使用yarn v1

Yarn v1 支持将软件包解析为定义的版本。您需要在以下resolutions部分添加一个部分package.json

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

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

如果您的项目正在积极开发中,并且您使用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.3"
  }
}

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

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

问题的根源

这个问题从事实茎gulp@3.9.1 依赖graceful-fs@^3.0.0它monkeypatches Node.js的fs模块。

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

graceful-fs@^4.0.0不再猴子补丁Node.js fs模块,这使其与Node.js> 11.15兼容。

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


6
哇-太好了!我不想回滚我的节点安装,因此这是一个完美的解决方案。
dgo

@Valentin对我有用,但是它如何工作?根据我的阅读,npm-shrinkwrap.json除了可以发布外,其行为应与package-lock.json相同。他们为什么在这里表现不一样?为什么需要npm-shrinkwrap.json来解决此问题?
JordRoss

4
该解决方案非常适合这种特殊情况-它应该确实是公认的答案。
zerodevx

13
这应该是公认的答案
jtate

1
@Valentin当我运行npm install以重新生成package-lock.json或时npm-shrinkwrap.json,似乎无法锁定此依赖项。重新运行后npm install --no-save,生成的文件package-lock.json仍指示npm安装缺少的依赖项。
PuiMan Cheui

95

使用以下命令并安装节点v11.15.0

npm install -g n

sudo n 11.15.0

会解决

ReferenceError:节点中未定义primordials

来自@Terje Norderhaug @Tom Corelis的引用。


3
为我工作!极好的答案。一直试图弄清楚这个问题已经有几个小时了。
GlennFriesen

3
辉煌的答案!
user1974753 '19

2
完善!为我工作。
Raja

2
真的,您救了我的命。谢谢。
trjade

5
我的(windows 64)机器上的npm install -gn产生错误:npm ERR!notsup n@6.1.3不受支持的平台:想要的{“ os”:“!win32”,“ arch”:“ any”}(当前:{“ os”:“ win32”,“ arch”:“ x64”})
Daryl McCullough

40

在1分钟内修复:

只需按照以下步骤。我在Windows 10上,它对我来说非常理想!

  1. 在您具有以下内容package.jsonnpm-shrinkwrap.json文件所在的目录中:
    {
      "dependencies": {
        "graceful-fs": {
            "version": "4.2.2"
         }
      }
    }
  1. 运行npm install,不用担心,它将npm-shrinkwrap.json随着大量内容进行更新。

  2. 运行gulp以启动项目。


1
就像在Win 10 / WSL下的魅力一样-谢谢!
opHASnoNAME

1
像魅力一样起作用的答案
Adiii

1
在Ubuntu中也像魅力一样工作。
马诺伊-GT

1
在Win 10专业版上运行良好!谢谢:)
elhef

1
大!我试图运行FilterBlend项目,但遇到了该死的错误。升级到gulp 4后,我遇到了另一个错误(gulp.hasTask不是函数)。创建此文件可以解决该问题。
丹尼斯·卡塞尔

27

使用以下命令进行安装node v11.15.0gulp 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

1
为我工作,必须遵循所有步骤。👍–
杰森(Jason)

1
请不要使用shortliving分支的NodeJS(所有奇数版本号喜欢9和11),使用10的NodeJS
丹尼尔·鲁夫

为我工作谢谢
卡皮尔·索尼

认真执行所有步骤。
Ele

在Windows上,第一个命令对EBADPLATFORM失败。
RonanPaixão

22

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

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

3
我总是最终回到这一点。
下雪了

3
请不要使用寿命短的NodeJS分支(所有奇数版本号,如9和11),而要使用NodeJS10。也请使用10代替代号。
丹尼尔·拉夫

1
对于Windows,请使用nvm-windows
卢帕

12

Gulp 3.9.1不适用于Node v12.xx,如果升级到Gulp 4.0.2,则必须使用新的语法(系列和并行)完全更改gulpfile.js。因此,最好的选择是降级到Node 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

干杯!


此后,我得到错误消息:“ / c / Users / User / AppData / Roaming / npm / node:第8行:C:\ Users \ User \ AppData \ Roaming \ npm / node_modules / node / bin / node:无此类文件或目录”
IvanTopić19年

11

有同样的错误,终于修复程序更新的包时,然后提到的同一节点引擎版本和故宫的版本package.json,因为它是在我的本地工作系统。

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

在heroku上部署时出现此错误。

以获得更多结帐Heroku支持


6

降级为节点稳定版为我解决了此问题,因为在升级到节点12之后发生了此问题

sudo n 10.16.0


3
如果您尝试这样做并得到错误:'sudo:n:找不到命令',请确保首先安装n:'npm install -g
n'– AlmostPitt

在Windows 10(64位)上尝试过此操作,并得到了:-C:\ react-script-editor> npm install -gn npm ERR!代码EBADPLATFORM npm ERR!notsup n@6.1.0不受支持的平台:想要的{“ os”:“!win32”,“ arch”:“ any”}(当前:{“ os”:“ win32”,“ arch”:“ x64”}) npm ERR!notsup有效的操作系统:!win32 npm ERR!notsup有效拱门:任何npm错误!notsup实际操作系统:win32 npm ERR!notsup实际拱门:x64
Nigel Price

6

TL:DR

Gulp 3.*在Node 12.*或更高版本上不起作用。您必须降级Node或升级Gulp。

如果时间不足,则将Node降级至v11。*或更低版本;如果您需要更新的功能,并且有时间修复大量的依赖项,请将Gulp升级到4. *或更高版本!

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

最好的选择最终取决于您有多少时间,因为升级Gulp带来了更干净的gulpfile和内置控制(使任务以串行或并行方式运行)的好处,而且还依赖于您将gulpfile重新编写为新语法,并且可能(阅读:可能会-参见本注释的结尾)引起与某些依赖项的冲突。


降级节点

这是最简单,最快的选择。特别是如果您使用nnvm,因为它们使您可以非常快速地安装并在Node版本之间切换。

在N上安装Node版本

n 10.16.0

NVM上的InstallationNode版本

nvm install 10.16.0

完成此操作后,您可能需要重建npm依赖关系,或者删除node_modules文件夹和package-lock.json文件,然后重新安装依赖关系。尽管如果仅恢复到先前存在的Node版本,则应该可以。


升级Gulp

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

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

已经有很多关于此的文章,所以我将不进一步详细说明细节,但要重申- 这不是一项快速的工作。根据项目的大小,可能需要进行一些显着的重写,并且您的依赖项可能会中断。如果时间紧缺,则应该选择简单地降级Node,至少是暂时降级。


但是我已经有了Gulp 4,但仍然无法使用!

如果像我一样,您已经在使用Gulp 4+(我4.0.2最初在Node 10上使用Gulp ),并且最近升级(我已升级到Node 13.8.0)仍然存在问题,那可能是因为依赖项依赖于古尔夫(Gulp)的较旧版本,并且该产品已在管道中被发现。

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

如果发生这种情况,您可以选择以下几种方法:

  1. 如果不是绝对必要,则无需插件
  2. 寻找替代品
  3. 修复插件

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

如果发生这种情况,最好只是降级Node,至少直到可以发布补丁为止。


4

该错误是由于新版本的Node(12)和旧版本的gulp(小于4)引起的。

不建议降级Node和其他依赖项。我通过更新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以下内容:

参考https : //fettblog.eu/gulp-4-parallel-and-series/#migration

之前:

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

            ....

    }
);

Other config...

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只需要适应两行。感谢您提供简短的迁移指南!
Tobias

3

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


2
抱歉,这弄乱了我整个npm的依赖关系。
ashilon

3

只需按照以下步骤。它可以与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将保持不变并可以永久使用。


2

这可能来得很晚,但是对于仍然有兴趣在使用最新的gulp ^ 4.0时保留其Node v12的任何人,请执行以下步骤:

使用以下命令更新命令行界面(仅出于预防目的):

npm i gulp-cli -g

添加/更新gulppackage.json的underdepends部分

"dependencies": {
  "gulp": "^4.0.0"
}

删除package-lock.json档案

删除资料node_modules

最后,运行npm i以正确的参数为Gulp ^ 4.0升级并重新创建全新的node_modules文件夹和package-lock.json文件

npm i

注意 Gulp.js 4.0引入了series()parallel()方法来组合任务,而不是Gulp 3中使用的数组方法,因此您在旧gulpfile.js脚本中可能会或可能不会遇到错误。

要了解有关应用这些新功能的更多信息,此站点确实做到了合理:https : //www.sitepoint.com/how-to-migrate-to-gulp-4/

如果有帮助,请留下重击


有什么gulp-cli用 我遵循了您的步骤,并开始使一切正常。但是后来我卸载了gulp-cli(因为我没有看到它的使用位置),并且一切仍然正常。不过,感谢您的回答,因为我已经启动并再次使用node v12.9.1和Gulp 运行4.0.2
MuffinTheMan

我很高兴它有所帮助。gulp-cli是命令行实用程序。它确保了gulp的
Sab



2

我遇到了同样的问题。我为我尝试和工作的内容:

  1. 检查NODE和GULP的版本(节点v12和gulp小于v4的组合不起作用)

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

    • sudo NPM安装-gn
    • 须藤n 10.16.0

它工作正常,然后按照控制台的说明进行操作。



1

对于那些正在使用yarn

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

请不要使用shortliving分支的NodeJS(所有奇数版本号喜欢9和11),使用10的NodeJS
丹尼尔·鲁夫

0

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

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

当我更改Node.js工具以安装12.x最新节点而不是旧节点时,最新的gulp版本是4.0.2。结果是与问题中所述相同的错误。

在这种情况下,对我有用的是按照Alphonse R. Dsouza和Aymen Yaseen的建议将node.js降级到最新的11.x版本。在这种情况下,尽管不需要使用他们建议的任何命令,而只需将Node.js工具安装程序版本规范设置为11.x以上的最新Node版本。

在此处输入图片说明

已安装并正在运行的Node.js的确切版本是11.15.0。我不必降低Gulp的等级。


0

将节点升级到版本12后,我遇到此错误,该版本不适用于Gulp 3.9.1。关于我的gulpfile.js并不那么复杂的事实,我决定使用本文升级到Gulp 4 ,它进展顺利,并且比我想象的要容易得多。



0

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

sudo npm i -g n
sudo n 11.15.0

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


0

对我有用的是在npm安装期间使用python2。

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

0

当我们使用s3 NPM软件包时,也会收到此错误。所以问题出在graceful-fs软件包上,我们需要对其进行更新。它在4.2.3上工作正常。

因此,只需查看日志跟踪中显示的NPM软件包,然后将graceful-fs相应更新为4.2.3。


0

我在Gulp 3的Node 12/13上也遇到错误,移至Node 11正常工作。



0

如果您尝试安装semantic-ui并且发生以下错误,请尝试js(13.5.0)从Node.js.org 下载具有最新功能的最新版本的节点。此外,除了尝试使用NPM安装语义外,您还应该添加链接(您可以找到该链接)从cdnjs链接index.html文件的标题。祝您好运!


这里的代码示例将是一个很好的补充。

-1

解决问题的步骤:-

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

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

现在您可以大批部署


1
这是@kevink 的答案的不正确伪造
Z4-

-1

我建议您首先确保NPM安装不是您的问题。然后,您降级节点和gulp版本。我使用了节点10.16.1和gulp 3.9.1。

要降级您可以尝试

npm install gulp@^3.9.1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.