【问题标题】:Why do I have two versions of npm为什么我有两个版本的 npm
【发布时间】:2015-03-29 08:11:32
【问题描述】:

我正在尝试在 ubuntu 服务器上使用 npm 和 nodejs 进行设置,但注意到在运行后不知何故我最终得到了两个版本 sudo apt-get install nodejs npm 我知道这一点,因为当我运行npm -v 时,它返回1.3.10,而当我运行sudo npm -v 时,它返回2.3.0。我想在我走得更远之前正确设置这个。有谁明白为什么我最终有两个版本?我的理解是安装 nodejs 也应该安装 npm,但这仅允许我以提升的权限运行 npm,我知道我不应该这样做。谁能让我知道我做错了什么?谢谢。

【问题讨论】:

    标签: node.js ubuntu npm


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 实际上我已经尝试过了,但我不知道如何判断哪个是全局的。我也不认为sudo which npm 给出了该命令的意图。这两个命令都指向相同版本的 npm (/usr/local/bin/npm)。有没有办法将sudo 应用于npm 而不是whichnpm
      • sudo su 到 root 并运行 which npm 以确保。
      • @hobenkr 你发现了吗?
      • 抱歉延迟响应。我不确定我是否完全弄清楚了,但 Sam 的建议似乎对其他用户来说是最可取的。根据我的阅读(并通过实验发现),从源代码安装节点听起来像是获取此软件的首选方式,尽管我坚持使用我现在发布的方法,因为它暂时有效,我只是暂时将其用于开发。
      • 我会说从源代码安装对您的个人工作站来说很好,但我不建议在生产环境中使用它,除非您打算维护安装。
      【解决方案3】:

      似乎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 环境变量中的目录顺序有关,但如果有人可以填写我在这里遗漏的内容,我将不胜感激,即使只是为了提供信息。

      编辑

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

      【讨论】:

        【解决方案4】:

        这是一个较老的问题,但我最近在安装了 node js 和一个 gradle 脚本控制我的构建的 Windows 上遇到了类似的问题。命令行上的 npm --version 报告了正确的 npm 版本,但 gradle 任务得到了不同的版本。我之前运行过 npm -g npm@latest 命令,这就是我遇到麻烦的原因。

        事实证明,npm 的“其他”版本托管在我在 npm-cache 中的用户文件夹中,一旦我删除了该文件夹,我的 gradle 任务只会找到我安装的 npm 副本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多