【问题标题】:NVM & Node.js - Recommended install for all usersNVM 和 Node.js - 推荐安装给所有用户
【发布时间】:2012-07-17 13:48:42
【问题描述】:

是否有推荐的 nvm 安装以便所有用户都可以使用?我在网上找不到任何关于此的内容。

这就是我所做的

  • 将 nvm 安装在公共目录中
  • 将 nvm.sh 脚本位置放在所有用户的 .profile 中
  • 创建了一个 nvm/alias 目录(如果其他用户不在这里,nvm 会抱怨)

那么每个用户必须要么运行“nvm use”,要么默认将其放入他们的配置文件中

不确定是否有更好的方法?

谢谢

【问题讨论】:

    标签: node.js nvm


    【解决方案1】:

    我有一个小型 VPS,有两个用户,由于空间有限,想避免安装多个节点副本

    只需将拥有 NVM 的用户的 $HOME/.nvm 移动到 /opt/nvmchmod -R 777 /opt/nvm,以便所有用户都可以写

    然后将.bashrc中每个用户的NVM_HOME设置为/opt/nvm

    对我来说似乎是最明显的解决方案,因为一个用户有一个预先存在的 .nvm 文件夹

    Re: 丑陋的权限,这个副本只会用于开发目的 - 我会推荐任何在生产中使用节点的人不要考虑这种方法

    【讨论】:

      【解决方案2】:

      在您的 Linux 服务器上安装 NVM,然后使用 NVM 安装节点版本(以 root 用户身份运行所有命令)。之后,为所有用户运行以下命令,获得可与 nvm 一起使用的 nodejs

      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/服务器上)和设置权限,以便所有用户都可以访问它们。

      /root/.nvm/versions/node/v8.10.0/bin/node

      切换用户名检查你的节点版本。

      su - username
      which node
      /usr/local/bin/node
      

      【讨论】:

        【解决方案3】:
        1. 以root身份登录:sudo -s
        2. 安装 nvm: curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh | NVM_DIR=/usr/local/nvm bash
        3. /etc/profile.d 中创建了一个名为nvm.sh 的文件,其内容如下: #!/usr/bin/env bash export NVM_DIR="/usr/local/nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
        4. 运行/etc/profile.d/nvm.sh
        5. 安装节点:nvm install node
        6. 可选择更新 npm 为:npm install -g npm

        【讨论】:

        • 对我不起作用。我认为这里缺少一些步骤。
        • 在 CentOS 7 上对我来说工作得非常好!谢谢!
        • 我必须先创建“/usr/local/nvm”,还要创建“chmod 755 /etc/profile.d/nvm.sh”
        【解决方案4】:

        还有这个为全球使用而设计的 nvm 分支:https://github.com/xtuple/nvm

        wget -qO- https://raw.githubusercontent.com/xtuple/nvm/master/install.sh | sudo bash
        
        sudo chown -R $USER /usr/local/nvm
        
        nvm install 8
        

        更新:我尝试了各种方法来使用 xtuple 的 nvm 和 n 来管理全局节点环境,但我总是遇到有问题的边缘情况。最后,最适合我的是从他们的网站下载几个版本的 node 并将它们解压缩到 /usr/local。然后用我想要的版本更新我的路径。例如

        export PATH=/usr/local/node-v7.10.1-linux-x64/bin:$PATH
        

        注意:您可能需要对节点路径进行 chmod 777 或指定一个用户来管理它。

        【讨论】:

        • 截至 2021 年 9 月,xtuple/nvm 分支大约有 7 年的历史,它说:这个分支提前 12 次提交,1702 次提交落后于 nvm-sh:master。它可能有效,但可能性很小。
        • 事实上,当它这么旧且无人维护时,它基本上是有保证的安全风险。不要使用这个。
        【解决方案5】:

        由于 LJHarb 建议不要在全局范围内安装它,我决定在您登录服务器时创建一个脚本来安装 nvm。我需要这个,因为我有几个用户设置可能登录,但需要访问 pm2(以监控我们的一个应用程序)。

        在 /etc/profile.d/ 中创建脚本(例如命名为 nvm.sh):

        #!/bin/bash
        NODE_VER=6.2.2
        if [ ! -f ~/.nvm/nvm.sh ]; then
            # May need to be updated with the latest nvm release
            wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh | bash
        fi
        source ~/.nvm/nvm.sh
        if ! command -v node | grep -q $NODE_VER; then
            echo "Node is not installed"
            nvm install $NODE_VER
            nvm alias default $NODE_VER
        fi
        

        对于我们的应用程序,我们需要在用户之间共享 pm2:

        if ! command -v pm2 &>/dev/null; then
            echo "pm2 not installed"
            npm install -g pm2
        fi
        # Share pm2 configuration between users
        alias pm2='env HOME=/opt/sora pm2'
        

        【讨论】:

        • 您可能还想将 NVM_DIR="" 添加到开头。如果您不这样做,那么“su-ing”到另一个用户将导致安装失败。这是因为 NVM_DIR 由安装脚本使用,但在使用之前没有初始设置。所以它有一个值集,实际上可能是以前的用户。
        【解决方案6】:

        这是我所做的:

        1. /opt/nvm 中以root 身份安装nvm。似乎是一个合适的位置。

          # git clone git@github.com:creationix/nvm.git /opt/nvm
          
        2. 创建了目录/usr/local/nvm。这是下载的地方 ($NVM_DIR)

          # mkdir /usr/local/nvm
          
        3. 创建目录/usr/local/node。这就是 NPM 全局内容的去向:

          # mkdir /usr/local/node
          
        4. /etc/profile.d 中创建了一个名为nvm.sh 的文件,其内容如下:

          export NVM_DIR=/usr/local/nvm
          source /opt/nvm/nvm.sh
          
          export NPM_CONFIG_PREFIX=/usr/local/node
          export PATH="/usr/local/node/bin:$PATH"
          
        5. 重新登录shell会话,然后设置默认节点版本。

          # nvm install 0.10
          # nvm alias default 0.10
          

        下次登录 shell 会话时,所有用户的节点二进制文件现在应该位于 PATH 中。 NPM 会将全局的东西安装到 /usr/local/node 前缀。

        【讨论】:

        • 我错过了第 4.5 步:source /etc/profile.d/nvm.sh。只有这样我才能使用 nvm。
        • 我尝试按照这些说明进行操作。当我运行nvm install node 时,我收到以下错误nvm is not compatible with the "NPM_CONFIG_PREFIX" environment variable: currently set to "/usr/local/node"
        • nvm 维护者在这里。 nvm 与“前缀”选项不兼容,您永远不应该以 root 身份安装 nvmnvm 是每个用户的。如果你想跨用户共享节点,nvm 是错误的工具。
        • 我认为@LJHarb 的评论需要更多关注。毕竟他是 nvm 的维护者。也许您应该发布该评论作为答案?
        • 是的,这将永远是真的。无论如何都没有理由使用“前缀”选项,并且 nvm 不可能与它兼容。
        【解决方案7】:

        最好全局安装一份node,方便其他用户访问。为此,请运行以下命令(在提示符处输入您的用户密码):

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

        此建议是将您通过 nvm 激活的任何版本的节点复制到 /usr/local/ 目录并设置权限,以便所有用户都可以访问它们。

        要检查它是否有效,请成为 root 用户并执行另一个 which 命令以确保该节点现在已安装到 /usr/local/bin

        sudo -s
        which node
        

        如果您想更改系统范围内安装的节点版本,只需执行另一个 nvm 使用 vXX.XX.XX 将您用户的节点切换到您想要的版本,然后重新运行上面的第一个命令进行复制到系统目录。

        【讨论】:

        • 这打破了我自己的很多权限,仅供参考
        • 这行得通。对于一项小任务,没有其他解决方案有效或似乎太冗长。
        • 这肯定不是“最好的”。如果您需要在不同的用户帐户下运行多个版本的节点,这可能是“方便”但也不是最好的。使用nvm从不以root身份安装)是那里唯一易于应用的选项。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-27
        • 1970-01-01
        • 1970-01-01
        • 2020-07-22
        • 2019-04-15
        • 1970-01-01
        相关资源
        最近更新 更多