不能从根(或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符号链接从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"
这使得npm
和node
可供所有用户使用。
你的问题是,当你使用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:
- 卸载nvm和nodejs。 这里有一些有用的链接: 卸载nvm 。 如果使用apt-get安装nodejs,则可以使用
apt-get purge nodejs
命令将其卸载。 - 安装一个全球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