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

Ram*_*esh 169 sass node.js 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
Run Code Online (Sandbox Code Playgroud)

在gulp sass-watch之前尝试过这个

npm -g install gulp-cli
Run Code Online (Sandbox Code Playgroud)

Pos*_*hin 375

一分钟搞定:

只需按照以下步骤操作即可。我使用的是 Windows 10,它非常适合我!

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

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

  3. 运行gulp以启动项目。

  • 因为`shrinkwrap.json`文件在`npm install`之后被修改,所以如果你想再次运行它,你需要删除它。解决方案是在 `package.json` `scripts` 节点中添加一行: `"preinstall": "cp npm-shrinkwrap.gulp.json npm-shrinkwrap.json"`,其中 `npm-shrinkwrap.gulp.json ` 是必需的,它将在 npm install 之前复制到 `npm-shrinkwrap.json` 中。(在 Windows 上将 `cp` 更改为 `copy`) (10认同)
  • 为我在 OSX Catalina 上工作 (9认同)
  • 在 win 10 / WSL 下工作就像一个魅力 - 谢谢! (8认同)
  • 在 Win 10 专业版上运行良好!谢谢 :) (6认同)
  • 我遇到了一个问题,我已经运行了“npm install”,之后添加了“npm-shrinkwrap.json”文件并再次运行了“npm install”。它不起作用,所以我必须从头开始该项目,只有在添加了“npm-shrinkwrap.json”之后,我才运行“npm install”,它起作用了。希望这是有道理的。 (6认同)
  • 在 Ubuntu 中也能发挥作用。 (3认同)
  • 伟大的!我试图运行 FilterBlend 项目,但遇到了这个该死的错误。升级到 gulp 4 后,我收到了不同的错误( gulp.hasTask 不是函数)。创建此文件可以解决该问题。 (3认同)
  • *警告*这只是一个临时解决方案,如果您再次运行“npm i”,它会再次损坏。 (2认同)

小智 211

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

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

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

  • 我正在使用节点`v12.1.0`和gulp`gulp @ 4.0.2`但它不起作用 (37认同)
  • 我建议使用 Valentin 发布的 npm-shrinkwrap.json 解决方案:/sf/answers/4087637991/,即使这是公认的解决方案。 (25认同)
  • Khaos也遇到了同样的问题。将节点降级到v11.15.0可以达到目的。 (10认同)
  • 我尝试使用节点`v10.x`和gulp`v3.x`,然后魔术发生了 (9认同)
  • 我使用节点`v14`和gulp`v4`。我仍然遇到这个问题:( (7认同)
  • 这里使用`webshot`节点包产生类似问题。我怀疑他们需要先更新一些内容,然后才能继续使用Node v12。 (3认同)
  • 不。不起作用 我已经尝试了所有^ 4.0.0口味。 (2认同)
  • 请不要使用生命周期较短的 NodeJS 分支(所有奇数版本号,如 9 和 11),请使用 NodeJS 10。 (2认同)

Alp*_*uza 23

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

npm install -g n

sudo n 11.15.0
Run Code Online (Sandbox Code Playgroud)

会解决

ReferenceError:节点中未定义primordials

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

  • 我的(Windows 64)机器上的 npm install -gn 产生错误:npm ERR!notsup n@6.1.3 不支持的平台:需要 {"os":"!win32","arch":"any"}(当前:{"os":"win32","arch":"x64"}) (7认同)
  • 完美的!为我工作。 (3认同)
  • 请不要使用奇怪的 NodeJS 版本。这些是短暂的版本。使用 NodeJS 10。 (3认同)
  • 为我工作!极好的答案。一直试图弄清楚这个问题已经有几个小时了。 (2认同)

小智 22

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
Run Code Online (Sandbox Code Playgroud)


sau*_*sdk 21

简单优雅的解决方案

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

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

{
  "dependencies": {
    "graceful-fs": {
        "version": "4.2.2"
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

"scripts": {
    "preshrinkwrap": "git checkout -- npm-shrinkwrap.json",
    "postshrinkwrap": "git checkout -- npm-shrinkwrap.json"
}
Run Code Online (Sandbox Code Playgroud)

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

  • 让我免于手动保存 npm-shrinkwrap.json,谢谢! (2认同)

kev*_*vnk 16

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

$ cd /to/your/project/
$ nvm install lts/dubnium
$ nvm use lts/dubnium
$ yarn upgrade # or `npm install`
Run Code Online (Sandbox Code Playgroud)

  • 请不要使用生命周期较短的 NodeJS 分支(所有奇数版本号,如 9 和 11),使用 NodeJS 10。同时使用“10”代替代码名称。 (6认同)
  • 我总是最终回到这一点。 (2认同)

Oli*_*ver 15

翻译:博士

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

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

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

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


降级 Node.js

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

在 N 上安装 Node.js 版本

n 10.16.0
Run Code Online (Sandbox Code Playgroud)

在 NVM 上安装 Node.js 版本

nvm install 10.16.0
Run Code Online (Sandbox Code Playgroud)

一旦你做到了这一点,你可能需要重建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,它仍然不起作用!

如果像我一样,您已经在使用 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 插件在内部依赖于旧的 Graceful-fs 版本。可以使用“npm ls Graceful-fs”找到罪魁祸首 - 使用版本低于 4 的 Graceful-fs 的软件包将导致此问题。将其从 gulpfile 中删除,使用替代方案或升级它来解决问题。 (2认同)

Leh*_*tis 12

对我来说,Diego Fortes 的回答只需一个小小的改动即可。

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

  1. npm install

  2. npm install gulp

  3. 创建文件NPM-shrinkwrap.json

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

  5. 吞咽(现在工作)

  • 这只是一个临时解决方案,如果你再次运行“npm i”,它就会再次损坏。 (3认同)

Rav*_*and 11

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

 "engines": {
    "node": "10.15.3",
    "npm": "6.9.0"
 }
Run Code Online (Sandbox Code Playgroud)

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

以获得更多结帐Heroku支持


小智 10

使用以下命令进行安装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
Run Code Online (Sandbox Code Playgroud)

将解决此问题:

ReferenceError: primordials is not defined in node
Run Code Online (Sandbox Code Playgroud)

  • 请不要使用生命周期较短的 NodeJS 分支(所有奇数版本号,如 9 和 11),请使用 NodeJS 10。 (6认同)
  • 为我工作,必须遵循所有步骤。 (3认同)

Mah*_*ary 9

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

尝试这个:

npm install -g n

sudo n 11.15.0
Run Code Online (Sandbox Code Playgroud)


小智 9

我仅在 Visual Studio 的任务运行程序资源管理器中出现该问题,从命令行或 PowerShell 运行时则未出现该问题。

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

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


Val*_*tin 8

在使用的旧项目中,我们遇到了相同的问题gulp@3.9.1。解决方法是强制graceful-fs@4.2.2使用包含以下内容的npm-shrinkwrap.json文件

{
  "dependencies": {
    "graceful-fs": {
      "version": "4.2.2"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后执行npm install将更新npm-shrinkwrap.json文件。请注意,这不是长期的解决方案,但是在您没有时间更新到时会有所帮助gulp@^4.0.0

  • 哇——这太棒了!我不想回滚我的节点安装,所以这是一个完美的解决方案。 (24认同)
  • 这个解决方案非常适合这种特殊情况 - 它确实应该是公认的答案。 (16认同)
  • 我对你感激不尽!完美运行,使用 npm > 8.3.0 将“overrides”键添加到 package.json! (3认同)
  • @Valentin 这对我有用,但是它是如何工作的呢?据我所知,除了可发布之外,npm-shrinkwrap.json 的行为应该与 package-lock.json 相同。为什么他们在这里的行为不一样?为什么需要 npm-shrinkwrap.json 来解决这个问题? (2认同)

Tom*_*lis 7

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

sudo n 10.16.0

  • 如果您尝试这样做并得到错误:“ sudo:n:找不到命令”,请确保首先使用以下命令安装n:npm install -gn (3认同)
  • 降级不是一个选择。我们需要一个修复方案,而不是创可贴解决方案。 (2认同)

Ols*_*nsk 7

检查 Node.js 版本:

 node --version
Run Code Online (Sandbox Code Playgroud)

检查 gulp 版本:

gulp -v
Run Code Online (Sandbox Code Playgroud)

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

  1. 升级一口
sudo npm install -g gulp
Run Code Online (Sandbox Code Playgroud)
  1. 降级节点
sudo npm install -g n
sudo n 11.15.0
Run Code Online (Sandbox Code Playgroud)

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


Rij*_*K P 6

这个错误是由于新版本的 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
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,我们还必须更新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']);
    }
);
Run Code Online (Sandbox Code Playgroud)

后:

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'));
    }
);
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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

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

    sudo NPM install -g n
    sudo n 10.16.0
    
    Run Code Online (Sandbox Code Playgroud)

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


归档时间:

查看次数:

102301 次

最近记录:

5 年,10 月 前