136

我已经提到我的应用程序在从sudo.

$ node -v
v0.10.23
$ sudo node -v
v0.11.8-pre

这个v0.11.8-pre给我带来了一些问题,所以我绝对不想使用它,但是我不能为 root 更改它。

$ sudo nvm use v0.10.23
sudo: nvm: command not found

我尝试从 root 用户安装 nvm,但收到错误“NVM 已安装”,但从sudo. 我的问题是什么?

4

12 回答 12

259

下面的命令列表(来源:digitalocean)似乎解决了这个问题

警告!!!!在某些情况下,这些命令可能会破坏您的系统!确保您知道这些命令的作用!!!有关的

n=$(which node); \
n=${n%/bin/node}; \
chmod -R 755 $n/bin/*; \
sudo cp -r $n/{bin,lib,share} /usr/local

上面的命令有点复杂,但它所做的只是将您通过 nvm 激活的任何版本的节点复制到/usr/local/目录中(用户安装的全局文件应该位于 linux VPS 上)并设置权限,以便所有用户都可以访问它们.

希望这可以帮助!

于 2015-04-27T18:46:20.370 回答
211

我的解决方案是从我正在使用node的版本创建符号链接:npm/usr/local/bin

sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/node" "/usr/local/bin/node"
sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npm" "/usr/local/bin/npm"

这使所有用户都可以使用npmnode

于 2016-10-17T05:10:54.810 回答
19

根本原因是因为nvm不是真正的程序。它是一个 bash 函数,可以在用户的​​ , 或 ... 中加载,因此不会像大多数其他程序一样自动从 $PATH 中.profile获取.bashrcsudo

另一种节点版本管理器是nhttps ://github.com/tj/n 。那是一个真正的程序,因此sudo将通过 $PATH 拾取它而无需任何黑客攻击(只要sudo/usr/local/bin其 $PATH 中有)。

sudo npm install -g n  # install 'n' globally
which n                # should be /usr/local/bin/n

sudo n lts             # need sudo to switch node versions
node --version         # v6.10.0
sudo node --version    # v6.10.0
于 2017-03-02T01:17:17.860 回答
18

您的问题是,nvm当您使用sudo.

所以输入

$ which nvm

结果会是这样的

/home/abc/mynvm/nvm

现在再试一次sudo

sudo /home/abc/mynvm/nvm use v0.10.23

我假设您随后遇到了 root 用户找不到 0.10.13 版本的问题,但让我们看看下一条错误消息...

于 2014-01-29T06:26:17.263 回答
15

根据自述文件

使用 nvm 时,您不需要使用sudo全局安装模块npm -g,因此不要这样做sudo npm install -g grunt,而是要这样做npm install -g grunt

需要 sudo npm 吗?

就我而言,我需要sudo npm run start访问某些需要 root 访问权限的文件。根据这个问题

你不使用sudo. 您应该改为 chmod/chown 文件,以便拥有 nvm 的用户可以访问该文件;。

总共

nvm 的维护者坚信我们不需要sudo:P

于 2018-11-05T05:28:06.557 回答
7

我也有你的问题。最后我已经解决了它。这是我的解决方案:

  1. 卸载 nvm 和 nodejs。以下是一些有用的链接: 卸载 nvm。如果您使用 apt-get 安装了 nodejs,您可以使用命令卸载它apt-get purge nodejs
  2. 安装全局 nvm。请参阅此页面:nvm global。正如它所说,“标准 nvm 已经知道在多用户或 root 环境中工作的困难。”

重新启动终端后,您可以运行命令sudo nvm ls

于 2015-02-23T21:16:07.417 回答
7
$ sudo bash -ic "nvm use stable; npm -v"
Now using node v6.3.1 (npm v3.10.3)
3.10.3
于 2016-10-08T07:57:28.603 回答
4

我在我的机器上也试过同样的方法,但nvm我的反应略有不同:

$ sudo node --version                                                                                                                                                                    
sudo: node: command not found

我的猜测是您在 nvm 之外安装了节点 0.11。(通过包管理器甚至源代码

因此,通过 sudo 运行节点会选择这个独立节点。

这有意义还是我错了?

于 2014-01-19T12:10:22.877 回答
2

通过扩展@SimpleJ 解决方案,我创建了一个有用的 bash 脚本,可用于将所有二进制文件从实际的 nvm bin 目录链接到/usr/local/bin

#!/bin/bash
. ~/.nvm/nvm.sh

DIR=$NVM_DIR/versions/node/$(nvm version)/bin/*
DEST=/usr/local/bin

for filename in $DIR; do
    filename=$(basename $filename)
    DEST_FILE=$DEST/$filename
    echo "Copying $filename to $DEST_FILE"
    sudo ln -sf "$NVM_DIR/versions/node/$(nvm version)/bin/$filename" "$DEST_FILE"
done
于 2022-02-17T08:56:57.450 回答
0

我只想从 NVM API 安装最新的 node-js,而不需要额外的包清除版本。所以我一直在寻找 SUDO nvm install-latest-npm。Mb 这对你有用 - 它确实对我有用,而无需安装/删除任何 apts。(显然将 YOUR_USER_DIRECTORY 更改为适合您系统的内容)

sudo /home/YOUR_USER_DIRECTORY/.nvm/nvm.sh | nvm install-latest-npm 
于 2021-10-11T10:26:04.053 回答
0

最简单的解决方案可能是直接点击 nvm.sh 可执行文件。

sudo /home/ubuntu/.nvm/nvm.sh install node

这对我来说很好(假设这是安装路径)。

完整的安装过程看起来像

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
export NVM_DIR="/home/ubuntu/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

然后你可以运行上面的命令来点击新安装的 nvm.sh

于 2018-06-26T18:20:50.513 回答
-2

全局安装 nvm
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | sudo bash

于 2016-04-29T00:21:45.000 回答