无法从根目录(或sudo)使用NVM


104

我已经提到过,从中运行时,我的应用程序使用不同版本的NodeJS 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”,但从运行时仍找不到nvm sudo。我怎么了


3
sudo -s 然后尝试安装nvm
Games Brainiac 2014年

@GamesBrainiac抱歉,但是我写了我试图从根目录安装它
Vitalii Korsakov 2014年

尝试从头删除/root/.nvm/并重新安装NVM
安东尼E.

没有/root/.nvm。我已经从sudo安装了nvm,并将其安装到普通用户homedir中
Vitalii Korsakov 2014年

Answers:


219

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

希望这可以帮助!


7
谢谢,对我有帮助。
Vishal Kumar Verma 2015年

7
谢谢!这节省了我很多时间
Quinton Pike

4
完善!非常感谢。
Jean-Baptiste Louazel

2
太棒了!昨晚,我在整个地方拼命更改了npm的权限,从而破坏了整个RasPi 3系统,今天我花了3小时寻找在全球范围内安装node / npm而不需要为每个npm调用使用sudo的最佳解决方案。losant.com/blog/how-to-install-nodejs-on-raspberry-pi,
博世

3
这听起来像是一个不错的选择,但我不断遇到这些错误:chmod: cannot operate on dangling symlink ‘/home/ec2-user/.nvm/versions/node/v7.1.0/bin/node-debug’ chmod: cannot operate on dangling symlink ‘/home/ec2-user/.nvm/versions/node/v7.1.0/bin/node-inspector’
trex005

129

我的解决办法是创建的版本的符号链接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提供给所有用户。


1
很好的解决方案。只需在第二行末尾添加“ ...(由于某种原因我自己无法编辑此内容)
Rayee Roded 17-4-24

1
太好了,这是迄今为止最好的解决方案。这样,root将始终使用与nvm用户相同的npm / node版本,谢谢!
luiscvalmeida

3
很好的解决方案,但是如果您更改正在使用的节点的版本,则必须重新运行以上命令。
door_number_three '18

4
npx经常使用。因此,我也添加了它:sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npx" "/usr/local/bin/npx"
托马斯(Thomas)

@SimpleJ您将如何处理babel-node
user566245 '19

14

您的问题是,nvm当您使用时,这并不是问题所在sudo

所以输入

$ which nvm

结果将是类似

/home/abc/mynvm/nvm

现在再试一次sudo

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

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


42
which nvm什么也没输出
Vitalii Korsakov 2014年

6
它也不会输出任何根
Vitalii Korsakov 2014年

3
问题是我从来没有以root用户身份登录。我为什么要?如果我需要任何root访问权限,请始终使用sudo。是的,我可以以root用户身份登录并安装nvm,但是将来我无法运行sudo nvm use v0.10.25。所以我也不sudo node能从用户那里使用。
Vitalii Korsakov 2014年

2
which nvm永远都行不通,对吗?nvm不是可执行文件,而是shell函数。github.com/creationix/nvm/issues/540
马特

2
最近,我问了一个类似的问题约which nvm在这里:stackoverflow.com/questions/49156104/...使用type nvm,以揭示其定义。正如Matt所说,这是一个shell函数。
Martin Braun

13

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

备用节点版本管理器是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

完善。谢谢“ nvm不是问题,而是一个bash函数” :)
另一个

哈哈,刚刚意识到我拼错了“问题”而不是“程序”;)。
另一个

7

根据自述文件

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

需要sudo npm吗?

就我而言,我需要sudo npm run start访问需要访问根目录的文件。根据这个问题

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

总共

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


6

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

  1. 卸载nvm和nodejs。以下是一些有用的链接:卸载nvm。如果使用apt-get安装了nodejs,则可以使用以下命令将其卸载apt-get purge nodejs
  2. 安装全局nvm。参见本页:nvm全局。就像它说的那样,“标准nvm在多用户或root用户环境中工作存在已知的困难。”

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


1
该分支前面有12个提交,在creationix:master之后有1123个提交。直接从xtuple存储库中获取的nvm
MrMesees


4

我在我的机器上也尝试过同样的方法,nvm但响应却很不一样:

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

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

因此,通过sudo运行节点将代替此独立节点。

这有意义还是我弄错了?


是的,你是对的。我已经安装了node然后安装了nvm。但是,对于普通用户而言,一切正常,对于root用户而言,则一切正常。
Vitalii Korsakov 2014年

1
哦,好吧。然后,我认为nvm并不是要以root身份运行。实际上,我很高兴在用户土地上运行是一个通缉的功能。然而,这可能会帮助您:github.com/creationix/nvm/issues/5
的Aurelien Thieriot

这个家伙显然制作了一个以sudo模式运行的特殊nvm:github.com/xtuple/nvm。不幸的是,仅在sudo模式下。我不知道这是否是可以接受的
的Aurelien Thieriot

0

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


creationix作者nvm,我会非常小心这个第三方nvm ...
MrMesees

4
该分支前面有12个提交,在creationix:master之后有1123个提交。这是一个问题,请删除链接
MrMesees

8
这个答案使我的眼睛流血。您只是不应该下载任何内容并在sudo bash,wtf中运行它
-CharlyDelta

实际上,这些天的wget命令以结尾,在| bash任何地方都没有sudo:nvm-sh / nvm:节点版本管理器
Elise van Looij

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.