为什么我有两个版本的 npm

Why do I have two versions of npm

我正在尝试在 ubuntu 服务器上设置 npm 和 nodejs,但我注意到在 运行ning 之后我以某种方式结束了两个版本 sudo apt-get install nodejs npm 我知道这一点是因为当我 运行 npm -v 时,它 returns 1.3.10,而当我 运行 sudo npm -v 时,它 returns 2.3.0。在我继续之前,我想正确设置它。有谁明白为什么我最终有两个版本?我的理解是安装 nodejs 也应该安装 npm,但这只允许我 运行 npm 具有提升的权限,我知道我不应该这样做。谁能让我知道我做错了什么?谢谢。

尝试 运行 which npm 然后 sudo which npm 看看哪个被认为是全局安装并删除另一个。然后将您的环境指向现有的 npm。

npm 似乎包含 nodejsnodejs 包含 npm。至少,它们包含不同版本的 npm(我没有检查节点版本),然后发生冲突。事实证明,nodejs 包含更新版本的 npm(我假设是更新版本的节点),所以这是我选择继续进行的版本。这是对我有用的完整解决方案。

卸载所有版本的node和npm。然后运行sudo apt-get install nodejs。最后,重启系统。

重新启动后,npm 可以 运行 没有提升的权限,但没有它们仍然无法安装。要解决此问题,this 答案中的建议很有用。简而言之,创建以下配置文件以将包存储在不同的位置:

#~/.npmrc
prefix=~/.npm_modules

我不完全确定重新启动的作用是什么,但 npm 软件包的一些内存似乎在卸载后保留了下来。在重新启动之前,ubuntu 继续在 /usr/bin/ 中寻找 npm,即使它驻留在 /usr/local/bin/ 中。我想这与 PATH 环境变量中的目录顺序有关,但如果有人可以填写我在这里遗漏的内容,即使仅供参考,我也会很感激。

编辑

完成此 post 后,我想到更改 npm 包的位置可能会对使用 npm install -g npm 更新 npm 造成问题,我认为这是进行更新的建议方法。我见过的另一种解决方案是让当前用户成为默认包位置的所有者,但这对我来说似乎有点愚蠢,并且不适用于多用户设置。有谁知道更好的解决方案?整个 npm 设置似乎有点像 catch-22...

对于某些Linux发行版(Debian/Ubuntu和RedHat/CentOS),发行版提供的最新节点版本可能落后于稳定版本。 Here are instructions from NodeSource 获取最新节点。

然后你可以通过运行 sudo npm i -g npm@latest安装最新的npm

这是一个较旧的问题,但我最近在 windows 上遇到了类似的问题,我在其中安装了节点 js 并使用 gradle 脚本控制我的构建。命令行上的 npm --version 报告了正确的 npm 版本,但 gradle 任务得到了不同的版本。我之前有 运行 npm -g npm@latest 命令,这就是我遇到麻烦的原因。

事实证明,"other" 版本的 npm 托管在我的 npm-cache 用户文件夹中,删除该文件夹后,我的 gradle 任务只找到我安装的 npm 副本.