Npm在Ubuntu 19.04中找不到模块"semver"的错误。

每当我尝试运行npm命令时,都会出现以下错误。
internal/modules/cjs/loader.js:626
throw err;
^

Error: Cannot find module 'semver'
Require stack:
- /usr/share/npm/lib/utils/unsupported.js
- /usr/share/npm/bin/npm-cli.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:623:15)
    at Function.Module._load (internal/modules/cjs/loader.js:527:27)
    at Module.require (internal/modules/cjs/loader.js:681:19)
    at require (internal/modules/cjs/helpers.js:16:16)
    at Object.<anonymous> (/usr/share/npm/lib/utils/unsupported.js:2:14)
    at Module._compile (internal/modules/cjs/loader.js:774:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:785:10)
    at Module.load (internal/modules/cjs/loader.js:641:32)
    at Function.Module._load (internal/modules/cjs/loader.js:556:12)
    at Module.require (internal/modules/cjs/loader.js:681:19) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/usr/share/npm/lib/utils/unsupported.js',
    '/usr/share/npm/bin/npm-cli.js'
  ]
}

我基本上是在尝试离线使用FreeCodeCamp。它要求我运行命令“npm ci”,然后我开始遇到这个错误。
我尝试重新安装npm,但它不起作用。我还尝试安装semver模块,但也没有帮助。
可能出了什么问题,我该如何解决?
7个回答

在这里找到了一个类似的问题here,答案有效。
sudo rm -rf /usr/local/bin/npm /usr/local/share/man/man1/node* ~/.npm
sudo rm -rf /usr/local/lib/node*
sudo rm -rf /usr/local/bin/node*
sudo rm -rf /usr/local/include/node*

sudo apt-get purge nodejs npm
sudo apt autoremove

https://nodejs.org/en/download/下载最新的tar.xz NodeJS文件。
tar -xf node-v#.#.#-linux-x64.tar.xz
sudo mv node-v#.#.#-linux-x64/bin/* /usr/local/bin/
sudo mv node-v#.#.#-linux-x64/lib/node_modules/ /usr/local/lib/

在这里,#.#.# 是您下载的版本。

使用以下方法验证安装:

node -v
npm -v

在Ubuntu 20上对我来说不起作用,模块仍然缺失。 - Gediminas
这个有Node,但没有npm。 - IceFire
太神奇了,这在2022年11月仍然有效。 - lesolorzanov

这取决于你想如何管理Node JS/npm。
正如Bilbo Baggins所建议的,你可以从官方网站https://nodejs.org/en/download/安装最新的LTS版本的Node JS。
在Ubuntu上,如果你更愿意通过默认仓库使用apt来管理Node,最好通过这种方式安装nodejs和npm。
很可能你正在使用的npm版本期望在与你安装的Node JS版本不一致的特定位置找到semver。如果只有一个nodejs版本和一个npm版本,并且它们都是使用默认仓库安装的,那么这应该完美地工作。
以下是我关于如何使用主要的Ubuntu仓库使Node和npm正常工作的最佳指导:
  1. sudo apt-get purge nodejs --auto-removesudo apt-get purge npm --auto-remove
  2. whereis node:逐个删除所有版本的node。重复此步骤,直到该命令在node:后返回空白。
  3. sudo apt-get install nodejs
  4. node --version:应返回... no such file or directory
  5. nodejs --version:应返回v1x.x.x。这是通过apt安装的版本。它可能比Node JS网站上最新版本要旧。
  6. sudo apt-get install npm
  7. npm --version:它将使用由apt安装的nodejs并正常工作。

我之前使用nvm来管理node版本,在我的情况下,npm的符号链接出了问题,我通过卸载然后重新安装node来解决了这个问题。
使用node --version命令检查你的node版本。
然后运行nvm uninstall <你的版本>命令。
最后使用nvm install <你的版本>命令重新安装。

运行这个命令,它会自动移除之前的 npm 版本并安装新版本的 npm,对我来说有效,你可以在这里查看详细信息 https://github.com/npm/cli
 curl -qL https://www.npmjs.com/install.sh | sh

这对我有用,但我必须以root身份运行它。 - Iftieaq
是的,你必须通过sudo来运行。 - Ujjawal Mandhani

我遇到了同样的问题,但是在22.04版本上。上述方法都对我无效,但是我找到了一个有效的解决办法。https://codemarvels.in/2021/03/20/npm-install-gives-error-cannot-find-module-semver/ 基本上是这样的:
sudo rm -rf /usr/local/bin/npm /usr/local/share/man/man1/node* ~/.npm
sudo rm -rf /usr/local/lib/node*
sudo rm -rf /usr/local/bin/node*
sudo rm -rf /usr/local/include/node*
sudo apt-get purge nodejs npm
sudo apt autoremove
sudo apt-get install nodejs npm

适用于我的Ubuntu 22版本。 - p1gd0g

在我的情况下,我使用的是nvm,所以我需要删除所有的node版本(rm -rf ~/.nvm/versions/node/*),然后安装nodejs和npm:
sudo apt install nodejs
sudo apt install npm

我遇到了一个Angular项目。不知怎么的,Angular-CLI (ng) 被移除了。
所以我只是验证了 nodenpm 是否安装,并且进行了以下操作来修复它:
sudo npm install -g @angular/cli