升级 Node 后,出现“分段错误 (核心已转储)”错误。我该如何解决?

9
我试图按照https://tecadmin.net/upgrade-nodejs-via-npm/的指导升级Node。我执行了sudo npm cache clean -fsudo npm install -g nsudo n stable命令。
在执行上述命令后,我愚蠢地执行了sudo ln -sf /usr/local/n/versions/node/11.8.0/bin/node /usr/bin/node命令。在执行此命令之后,我检查了/usr/local/n/versions/node文件夹。它有10.15.3,因此我键入了sudo ln -sf /usr/local/n/versions/node/10.15.3/bin/node /usr/bin/node
现在,node -v显示10.15.3。但是,npm -version给出Segmentation fault (core dumped)。像npm update -g这样的其他命令也会给我同样的错误消息。
关于Segmentation fault (core dumped)错误的其他文章似乎与我的问题不直接相关。
我该如何解决这个问题?
我正在使用Ubuntu 19.04。
谢谢。
5个回答

29
我刚遇到了同样的问题,这是由于node和nodejs的npm版本冲突造成的。
所以请按照以下命令卸载nodejs。
sudo apt-get remove nodejs

这将删除所有与Node.js相关的软件包。

在执行上述命令之后,您需要运行类似于以下的autoremove命令。

sudo apt autoremove

这将解决问题,

现在你只需要在你的机器上安装Node包,并且NPM(分段转储)错误也将得到解决。

你可以更深入地了解什么是分段错误


我很高兴能够帮助。 - Adarsh Sharma
2
它把我的Node.js、npm和Node全部删除了,所以我不得不重新安装。 - Yusuf
对我不起作用,你能在这方面帮我一下吗? - Monkey D. Luffy
当我的 npm pack 命令失败时,这对我很有效。然而,它会删除所有由 apt-get 安装的与 npm 相关的软件包,但由于我使用 conda 管理 npm,所以这对我不是问题。 - taper
这一定是我在著名软件的发布版本中遇到的最有趣的错误了...每次执行npm,无论是否带有任何选项,都会立即导致段错误,并且根据这个答案所述,只有在删除所有与nodejs相关的软件包后才能解决。 - LIU Qingyuan

4

尝试运行 npm rebuild 重新编译您的依赖项。


使用 pnpm,pnpm rebuild 工作得非常完美! - Jack Steam

0

这是由于编译的二进制文件与它们链接的库之间的“二进制不兼容”引起的。以下是可能导致此问题的原因列表:

  • 升级nodejs,因为您需要从干净状态重新构建代码
  • 例如,如果您将node_modules从Mac复制到Linux或从Ubuntu复制到Alpine Linux,则使用Docker共享
  • Docker多阶段构建会忘记早期阶段中的库,除非您明确复制它们
  • Vagrant出于与Docker相同的原因。如果您在虚拟机内外运行相同版本的Linux发行版,并且通过共享文件夹或卷共享node_modules,则可能会偶然工作,这在Vagrant上更常见

通常有效的短期解决方法:

rm -rf node_modules

0
考虑使用 Node 版本管理器。一旦安装,您可以轻松地升级或降级 Node 版本,并使用像 NVM use 16 或 NVM use 18 这样的命令随时切换版本。有时我会遇到分段错误,然后迅速切换回 Node 16。

这个问题是由于升级前的node_modules兼容性引起的。NVM无法解决这个问题。请使用npm删除并重新安装node_modules。 - undefined

-3

尝试运行以下两个命令

sudo apt --auto-remove purge npm

sudo apt --auto-remove purge nodejs

执行这些命令后,npm可以正常工作而无需安装。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接