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

时间:2019-04-30 12:57:11

标签: node.js sass gulp gulp-sass

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

在大吃一惊之前尝试过这个

npm -g install gulp-cli

40 个答案:

答案 0 :(得分:208)

在1分钟内修复:

只需遵循these steps。我在Windows 10上运行,对我来说效果很好!

  1. 在您拥有package.json的目录中,创建一个包含以下内容的npm-shrinkwrap.json文件:
    {
      "dependencies": {
        "graceful-fs": {
            "version": "4.2.2"
         }
      }
    }
  1. 运行npm install,请放心,它将使用大量内容更新npm-shrinkwrap.json

  2. 运行gulp以启动项目。

答案 1 :(得分:40)

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

npm install -g n

sudo n 11.15.0

将解决

  

ReferenceError:未在节点中定义原始字符串

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

答案 2 :(得分:31)

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

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

解决方案:要么升级到gulp 4,要么降级到早期的节点。

答案 3 :(得分:24)

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

解决方案

通过使用包含以下内容的npm-shrinkwrap.json filegulp@3.9.1覆盖到graceful-fs版本,此修补程序使您可以将Node.js 12与4.2.2一起使用:

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

然后执行npm install,这将更新npm-shrinkwrap.json文件。

其他信息

此问题源于gulp@3.9.1上的graceful-fs@^3.0.0 depends,它修补了Node.js fs模块。

此功能一直与Node.js一起使用,直到版本11.15(这是开发分支的version,不应该在生产中使用)。

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

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

答案 4 :(得分:14)

使用以下命令安装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

答案 5 :(得分:12)

简单优雅的解决方案

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

答案 6 :(得分:9)

TL:DR

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

如果时间紧迫,请将Node降级至v11。*或更低版本;如果您需要更新的功能,并且有时间修复可能的依赖关系破坏,请将Gulp升级到4. *或更高版本!

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

最佳选择最终取决于您有多少时间,因为升级Gulp可以带来更干净的gulpfile以及对在series or parallel中运行任务的内置控制的好处,而且还取决于您将gulpfile重写为一种新语法,并且可能(阅读:可能会-见本注释的结尾)会导致与某些依赖项发生冲突。


降级节点

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

在N上安装Node版本

n 10.16.0

NVM上的InstallationNode版本

nvm install 10.16.0

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


升级Gulp

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

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

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


但是我已经有了Gulp 4,但仍然无法正常工作!

如果像我一样,您已经在使用Gulp 4+(我以前在节点10上使用Gulp 4.0.2),并且最近升级了(我升级到Node 13.8.0),那么您是否仍然这个问题,可能是因为依赖项依赖于旧版本的Gulp,并且已经陷入了流水线。

对于我来说,gulp-combine-mq是使用Gulp 3.9.*的依赖项。在我的gulp文件中禁用此任务将使Gulp再次运行。

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

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

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

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

答案 7 :(得分:7)

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

尝试一下:

npm install -g n

sudo n 11.15.0

答案 8 :(得分:5)

对我来说,Diego Fortes' answer 只需稍作改动即可。

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

  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(正在工作)

答案 9 :(得分:4)

具有相同的错误,并最终在更新所有软件包时加以解决,然后在package.json中提及了与我的本地操作系统中相同的节点引擎版本和npm版本

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

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

更多结帐heroku support

答案 10 :(得分:4)

检查节点版本:

 node --version

检查gulp版本:

gulp -v

如果节点> = 12并且gulp <= 3,请执行以下一项操作:

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

https://www.surrealcms.com/blog/how-to-upgrade-or-downgrade-nodejs-using-npm.html

答案 11 :(得分:4)

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

干杯!

答案 12 :(得分:2)

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

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

答案 13 :(得分:2)

我在Windows 10上通过从“添加或删除程序-> Node.js”中卸载节点来解决此问题

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

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

答案 14 :(得分:2)

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

答案 15 :(得分:2)

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

答案 16 :(得分:1)

对于使用element { height: 50vh!important; } 的用户。

yarn

答案 17 :(得分:1)

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

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

npm i gulp-cli -g

添加/更新package.json依赖项下的gulp

"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脚本中的错误。

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

如果有帮助,请重击

答案 18 :(得分:1)

Gulp在Nodejs 11及更高版本中出现了问题。卸载当前节点版本,然后重新安装v10.15.1,此处是该版本的链接。这对我有帮助,也可以解决您的问题。

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

答案 19 :(得分:0)

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

  

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

答案 20 :(得分:0)

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

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

答案 21 :(得分:0)

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

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

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

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

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

答案 22 :(得分:0)

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

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

Issue

Update

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

Version

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

<块引用>

从未定义任务:仅默认。

答案 23 :(得分:0)

答案 24 :(得分:0)

我遇到了同样的问题。 我为我努力的工作: 1)。检查NODE和GULP的版本(节点v12和gulp小于v4的组合不起作用) 2)。我将npm版本降级为:    #sudo npm install -g n    #sudo n 10.16.0 它工作正常,然后按照您的控制台进行操作

答案 25 :(得分:0)

降级到节点稳定版为我解决了这个问题,因为升级到节点12后就出现了

while(1) { pthread_mutex_lock( &recoveryMutex ); while( workload < MAXLOAD ) { pthread_cond_wait(&recoveryCond, &recoveryMutex ); } /* Recovery Code */ /* Recovery Code */ /* Recovery Code */ pthread_mutex_unlock(&recoveryMutex); }

答案 26 :(得分:0)

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

sudo npm i -g n
sudo n 11.15.0

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

答案 27 :(得分:0)

我有同样的问题,但是我已经解决了这个问题。我建议您首先,首先确保 npm安装没问题。然后降级版本节点和gulp。我使用版本节点10.16.1和gulp 3.9.1。 要降低您的口水,可以写

npm install gulp@^3.9.1

答案 28 :(得分:0)

如果您尝试安装语义UI并发生以下错误,请尝试从nodejs.org,Morover下载具有最新功能的最新版本的节点js(13.5.0),而不是尝试npm install语义应该只添加链接(您可以从https://cdnjs.com/libraries/semantic-ui.to中找到index.html文件的标题。 祝你好运!

答案 29 :(得分:0)

通过将node.js版本从12.14.0降级为10.18.0并重新安装node_modules来解决

答案 30 :(得分:0)

您在这里有两个选择

  1. 升级到gulp 4或其他版本
  2. 降级到较早的节点版本。

答案 31 :(得分:0)

我将节点升级到版本12后出现此错误,该版本不适用于Gulp 3.9.1。关于我的gulpfile.js不太复杂的事实,我决定使用http://dev.craphael.fr/api/user.php?user=Osarel&password=test升级到Gulp 4,它运行良好,并且比我想象的要容易得多。

答案 32 :(得分:0)

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

答案 33 :(得分: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版本。

enter image description here

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

答案 34 :(得分:0)

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

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

答案 35 :(得分:-1)

我正在使用节点v12.13.1,因此我已降级到v10.19.0,并且在此之后运行良好。

答案 36 :(得分:-1)

我在安装npm软件包https://www.npmjs.com/package/webshot

时遇到了同样的问题

注意:这是该程序包的一个已知问题,因为它取决于幕后的grace-fs。

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

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

答案 37 :(得分:-1)

我尝试了很多建议来解决Windows 10计算机上现有项目的此问题,并最终按照以下步骤进行了解决;

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

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

据我所见,这个问题是在为一个新项目安装Node.js的最新推荐版本(12.18.4)之后开始发生的,并且仅当某些FE更改未反映在现有Web上时我才意识到这一点项目。

enter image description here

答案 38 :(得分:-1)

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

答案 39 :(得分:-2)

解决问题的步骤:-

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

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

现在您可以大批部署