不能从根(或sudo)使用NVM

我已经提到,我的应用程序使用不同版本的NodeJS从sudo运行时。

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

这个v0.11.8-pre引起了一些问题,所以我绝对不想使用它,但是我不能根改它。

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

我试图从root用户安装nvm,但得到错误“NVM已经安装”,但从sudo运行时仍然没有findnvm。 我的问题是什么?

下面的命令列表(来源: 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上)并设置权限所有用户都可以访问它们。

希望这可以帮助!

我的解决scheme是创build符号链接从nodenpm我使用到/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可供所有用户使用。

你的问题是,当你使用sudo时, nvm不在path中。

所以input

 $ which nvm 

结果会是这样的

 /home/abc/mynvm/nvm 

现在用sudo再试一次:

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

我假设你遇到了root用户找不到0.10.13版本的问题,但是可以看到下一个错误信息…

我在我的机器上也尝试了同样的方式,我也有一些不同的回应:

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

我的猜测是你已经在nvm之外安装了节点0.11。 ( 通过包pipe理器或甚至来源

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

这是有道理的,还是我错了?

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

  1. 卸载nvm和nodejs。 这里有一些有用的链接: 卸载nvm 。 如果使用apt-get安装nodejs,则可以使用apt-get purge nodejs命令将其卸载。
  2. 安装一个全球nvm。 看到这个页面: nvm global 。 正如它所说的,“标准nvm在多用户或根植环境中工作已经很困难”。

重新启动terminal后,可以运行命令sudo nvm ls

 $ sudo bash -ic "nvm use stable; npm -v" Now using node v6.3.1 (npm v3.10.3) 3.10.3 

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

根本原因是因为nvm不是一个真正的程序。 这是一个bash函数,它被加载到用户的.profile.bashrc或…所以sudo不会像大多数其他程序一样从$ PATH中自动获取它。

另一个节点版本pipe理器是n : https : //github.com/tj/n 。 这是一个真正的程序,所以sudo会通过$ PATH捡起来,而没有任何诡计(只要sudo的$ PATH中有/usr/local/bin )。

 sudo npm install -gn # 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