无法从root(或sudo)使用NVM

Vit*_*kov 90 node.js nvm

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

$ node -v
v0.10.23
$ sudo node -v
v0.11.8-pre
Run Code Online (Sandbox Code Playgroud)

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

$ sudo nvm use v0.10.23
sudo: nvm: command not found
Run Code Online (Sandbox Code Playgroud)

我试图从root用户安装nvm,但是错误"已经安装了NVM",但在运行时仍未找到nvm sudo.我的问题是什么?

Ven*_*van 188

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

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

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

希望这可以帮助!

  • 谢谢,它帮助了我. (7认同)
  • 谢谢!这为我节省了很多时间 (7认同)
  • 完善!非常感谢. (4认同)
  • 真棒!昨晚我通过拼命更改npm的权限来破坏我的整个RasPi 3系统,今天我花了3小时寻找全局安装node/npm的最佳解决方案,而不需要为每个npm调用使用sudo.您的解决方案适用于此帖子https://www.losant.com/blog/how-to-install-nodejs-on-raspberry-pi (2认同)
  • 这听起来像是一个不错的选择,但我不断遇到这些错误:`chmod:无法在悬空的符号链接'/home/ec2-user/.nvm/versions/node/v7.1.0/bin/node-debug'上运行chmod:无法在悬挂的符号链接'/home/ec2-user/.nvm/versions/node/v7.1.0/bin/node-inspector'上运行 (2认同)
  • ` sudo su` `sudo: /usr/bin/sudo 必须由 uid 0 拥有并且设置了 setuid 位`哦来吧 (2认同)
  • 运行后得到 `sudo: /usr/local/bin/sudo 必须由 uid 0 拥有并且也设置了 setuid 位`。**看起来需要重建服务器!** (2认同)

Sim*_*leJ 109

我的解决办法是创建的版本的符号链接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"
Run Code Online (Sandbox Code Playgroud)

这使得npmnode提供给所有用户.

  • 很好的解决方案,但是如果你改变你正在使用的节点的版本,你将不得不重新运行上述命令. (3认同)
  • 我经常使用`npx`.所以我也添加了它:`sudo ln -s"$ NVM_DIR/versions/node/$(nvm version)/ bin/npx""/ usr/local/bin/npx"` (3认同)

CFr*_*rei 13

你的问题是,nvm你使用时不在路径中sudo.

所以输入

$ which nvm
Run Code Online (Sandbox Code Playgroud)

结果就像是

/home/abc/mynvm/nvm
Run Code Online (Sandbox Code Playgroud)

现在再试一次sudo:

sudo /home/abc/mynvm/nvm use v0.10.23
Run Code Online (Sandbox Code Playgroud)

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

  • `哪个nvm`什么都不输出 (38认同)
  • 它也不会为root输出任何东西 (6认同)
  • 问题是我从未以root用户身份登录.我为什么要?如果我需要root访问权限,我总是使用`sudo`.是的,我可以以root身份登录并安装nvm,但将来我无法运行`sudo nvm use v0.10.25`.所以我也不能使用用户的`sudo node`. (3认同)
  • `哪个nvm`不起作用,是吗?`nvm`不是可执行文件,它是一个shell函数.https://github.com/creationix/nvm/issues/540 (2认同)
  • 我最近在这里问了一个类似的问题:`nvm`:/sf/ask/3440927311/ -or-ex使用`type nvm`来显示它的定义.正如马特所说,这是一个shell函数. (2认同)

wis*_*cky 10

根本原因是因为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
Run Code Online (Sandbox Code Playgroud)

  • 完美的。感谢“nvm 不是问题,而是 bash 函数”:) (2认同)

Qia*_*yue 6

我也有你的问题.最后我解决了这个问题.这是我的解决方案:

  1. 卸载nvm和nodejs.以下是一些有用的链接:卸载nvm.如果使用apt-get安装了nodejs,则可以使用该命令将其卸载apt-get purge nodejs.
  2. 安装全局nvm.看此页:nvm global.正如它所说,"标准的nvm已经知道在多用户或有根的环境中工作有困难."

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

  • 这个分支比之前的 12 次提交,在 creationix:master 之后 1123 次提交。直接取自 nvm 的 xtuple 存储库 (2认同)

rob*_*ndo 6

通过扩展 @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
Run Code Online (Sandbox Code Playgroud)


Aur*_*iot 5

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

$ sudo node --version                                                                                                                                                                    
sudo: node: command not found
Run Code Online (Sandbox Code Playgroud)

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

因此,通过 sudo 运行节点将改为选择此独立节点。

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


pmo*_*sio 5

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


lzl*_*31x 5

根据自述文件

使用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

  • 那么,如果我想使用串行设备,我也应该 chmod 我的 `/dev/ttyS0` 吗? (2认同)