669

在 OS X 中使用新的终端会话时,nvm忘记节点版本并默认为空:

$ nvm ls

         .nvm
     v0.11.12
     v0.11.13

nvm use v.0.11.13我必须在每节课中不断击球:

         .nvm
     v0.11.12
->   v0.11.13

我已经尝试了brew安装以及官方安装脚本。

.profile的 brew 版本:

#nvm
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh

对于 install.sh 脚本:

$ curl https://raw.githubusercontent.com/creationix/nvm/v0.10.0/install.sh | bash

#nvm
export NVM_DIR="/Users/farhad/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm

任何线索我做错了什么?

4

24 回答 24

1377

试试nvm alias default。例如:

$ nvm alias default 0.12.7

这会在您的 shell 中设置默认节点版本。然后通过关闭 shell 窗口、打开一个新窗口来验证更改是否仍然存在,然后: node --version

于 2014-07-05T14:00:19.807 回答
118

node自身设置别名,以避免稍后更新默认别名以及节点版本更新。

nvm alias default node
于 2015-08-06T14:58:38.490 回答
59

就我而言,另一个程序添加了PATH更改.bashrc

如果其他程序更改了nvm 的初始化PATH 之后,那么 nvm 的PATH更改将被遗忘,我们将在我们的PATH(或没有节点)上获得系统节点。

解决方案是将 nvm 设置移动.bashrc

### BAD .bashrc ###

# NVM initialisation
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm

# Some other program adding to the PATH:
export PATH="$ANT_ROOT:$PATH"

解决方案:

### GOOD .bashrc ###

# Some other program adding to the PATH:
export PATH="$ANT_ROOT:$PATH"

# NVM initialisation
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm

(这是 CentOS 上的 bash 4.2.46。在我看来,这就像 bash 中的一个错误,但我可能弄错了。)

于 2017-12-19T09:19:49.073 回答
47

要安装最新的稳定版本:

nvm install stable

要将默认设置为稳定版本(而不是特定版本):

nvm alias default stable

要列出已安装的版本:

nvm list

从 开始v6.2.0,它看起来像:

$ nvm list
         v4.4.2
->       v6.2.0
default -> stable (-> v6.2.0)
node -> stable (-> v6.2.0) (default)
stable -> 6.2 (-> v6.2.0) (default)
iojs -> N/A (default)
于 2016-06-01T06:37:42.460 回答
29

nvm 通过更改 PATH 变量来完成其工作,因此您需要确保在获取 nvm.sh 脚本后不会以某种方式将 PATH 更改为其他内容。

就我而言,在 .bashrc 中调用了 nvm.sh ,但随后在 .bash_profile 中更新了 PATH 变量,这导致我的会话在 nvm 节点之前找到系统节点。

于 2015-07-08T15:22:19.540 回答
14

评价最高的解决方案似乎对我不起作用。我的解决方案如下:

  1. 使用自制软件完全卸载 nvm:brew uninstall nvm
  2. 重新安装brew install nvm
  3. 在终端中,按照以下步骤操作(通过自制软件安装 nvm 时也会列出这些步骤):

    mkdir ~/.nvm cp $(brew --prefix nvm)/nvm-exec ~/.nvm/ export NVM_DIR=~/.nvm source $(brew --prefix nvm)/nvm.sh

上述步骤会将 NVM 的工作目录添加到您的 $HOME 路径,将 nvm-exec 复制到 NVM 的工作目录并添加到 $HOME/.bashrc、$HOME/.zshrc 或您的 shell 的等效配置文件中。(再次取自 whats使用自制程序在 NVM 安装中列出)

于 2015-09-29T04:18:49.590 回答
12

这是一个简单的指令:

1)安装:

nvm install 8.10.0

2) 每个终端使用一次

nvm use 8.10.0

3)设置为所有终端的默认值

nvm alias default 8.10.0

您可能需要使用 root 权限来执行这些操作。

并且不要忘记查看nvm 文档以获取更多信息。

另请注意,您可能需要为 IDE 指定节点版本: 在此处输入图像描述

于 2020-06-05T07:25:13.273 回答
8

如果你已经尝试了一切仍然没有运气,你可以试试这个:_

1 -> 卸载 NVM

rm -rf ~/.nvm

2 -> 按照这个删除 npm 依赖项

3 ->安装 NVM

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

4 -> 设置~/.bash_profile配置

sudo nano ~/.bash_profile

按照这个复制粘贴

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

5 ->CONTROL + X保存更改

6 -> 运行 . ~/.bash_profile

7 -> 现在你应该已经nvm在你的机器上安装了,安装节点运行nvm install v7.8.0这将是默认节点版本,或者你可以安装任何版本的节点

于 2018-10-14T16:15:38.733 回答
6

这个问题已经针对 OSX 提到过,但它发生在我的 linux 操作系统中。我尝试使用nvm alias default <version>,但对于每个新的终端会话,使用的节点版本都被遗忘了。所以,这是我想出的解决方案。

确保为节点版本设置默认别名,将以下代码放在 .bashrc 中,然后source .bashrc.

export NVM_DIR="/home/bonnie/.nvm"
## If the file exists and is not empty
if [ -s "$NVM_DIR/nvm.sh" ]; then
    ## Source it
    source "$NVM_DIR/nvm.sh"
fi
NODE_DEFAULT_VERSION=$(<"$NVM_DIR/alias/default")
export PATH="$NVM_DIR/versions/node/$NODE_DEFAULT_VERSION/bin":$PATH

描述性解决方案链接

于 2015-11-22T20:21:02.623 回答
6

我正在使用 ZSH,所以我必须按~/.zshrc顺序修改有关 NVM 的行:

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
source ~/.nvm/nvm.sh
于 2019-12-10T14:13:34.467 回答
5

nvm install 10.14例如,nvm use为当前 shell 会话执行该版本,但它并不总是像您期望的那样将其设置为未来会话的默认值。您在新的 shell 会话中获得的节点版本由nvm alias default. 令人困惑的是,nvm install如果尚未设置默认别名,则只会设置默认别名。要获得预期的行为,请执行以下操作:

nvm alias default ''; nvm install 10.14

这将确保下载该版本,将其用于当前会话并将其设置为未来会话的默认值。

于 2019-02-07T12:08:05.660 回答
3

安装任何版本后运行它,

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

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

于 2015-12-12T09:50:19.030 回答
3

我在这里找到了一条新路。使用n 交互式管理您的 Node.js 会有所帮助。

于 2018-03-23T07:51:32.230 回答
2

如果您也有 SDKMAN...

SDKMAN 不知何故与我的 NVM 发生冲突。如果您对此束手无策,但仍然无法弄清楚,我只是通过忽略 SDKMAN 中的“这必须在文件末尾...”并将 NVM 行放在它后面来修复它。

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="/Users/myname/.sdkman"
[[ -s "/Users/myname/.sdkman/bin/sdkman-init.sh" ]] && source "/Users/myname/.sdkman/bin/sdkman-init.sh"

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
于 2019-07-01T15:38:31.253 回答
2

在 VS Code 编辑器中使用集成终端时,我遇到了同样的问题。使用 nvm 更改节点版本后重新启动 VS Code 为我解决了这个问题。

于 2020-02-13T06:49:29.283 回答
2

出于某种原因,在我的.bashrc文件中,我发现了这个:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" --no-use  # This loads nvm

并且不得不删除--no-use标志,我不记得把它放在首位......只是另一件事要检查。

于 2021-09-03T10:41:00.313 回答
2

这些解决方案都没有在我的环境中工作,无论如何,nvm 似乎总是加载第一个安装的节点版本(除非你通过 临时更改它nvm use)。

更改我发现的默认值的唯一方法是:

  • 清除 nvm 缓存:nvm cache clear
  • 将默认设置为所需版本:(nvm alias default 12或任何版本)
  • 切换到所需版本:nvm use 12
  • 卸载所有其他版本:
    • nvm ls(列出安装)
    • nvm uninstall x(为每个非默认安装运行)
  • 重新安装其他版本:nvm install x

您可以使用此脚本自动执行此过程(只需将第一个变量更改为您想要的版本) - 它会自动重新安装您之前拥有的所有版本。

DEFAULT_NVM_VERSION=16
nvm cache clear
nvm install $DEFAULT_NVM_VERSION
nvm alias default $DEFAULT_NVM_VERSION
NVERS=$(nvm ls --no-alias | grep -v -- "->" | grep -o "v[0-9.]*")
while read ver; do nvm uninstall $ver; done <<< $NVERS
while read ver; do nvm install $ver; done <<< $NVERS
nvm use $DEFAULT_NVM_VERSION

或作为单行:

DEFAULT_NVM_VERSION=16 && nvm cache clear && nvm install $DEFAULT_NVM_VERSION && nvm alias default $DEFAULT_NVM_VERSION && NVERS=$(nvm ls --no-alias | grep -v -- "->" | grep -o "v[0-9.]*") && while read ver; do nvm uninstall $ver; done <<< $NVERS && while read ver; do nvm install $ver; done <<< $NVERS && nvm use $DEFAULT_NVM_VERSION

新终端现在应该尊重默认版本。

于 2021-12-14T21:57:00.313 回答
1
$ nvm alias default {NODE_VERSION}

当我们使用上述命令时,只更新节点版本,但npm仍然使用旧版本。

这是更新两者的另一种解决方案nodenpm在我的情况下,我想使用节点8.9.4并且我使用了以下命令。

$ nvm use default 8.9.4

该命令返回输出。

现在使用节点 v8.9.4 (npm v5.6.0)

于 2019-08-30T05:03:17.120 回答
1

如存储库的问题部分所述,nvm use仅适用于 shell 的生命周期。我发现这非常有用,但有时当您处理需要不同版本代码的不同代码库时,它实际上可能会给您带来麻烦。这是GitHub 中相关讨论的链接

于 2021-10-22T10:36:59.400 回答
0

在 Ubuntu 上,如果您正在运行非交互式 shell,例如从 cronjob、init 或 upstart 脚本运行,则存在潜在问题。

Ubuntu 的默认设置.bashrc在顶部有这个保护,如果 shell 是非交互式的,它会提前退出:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

因此,为了为非交互式脚本加载 NVM,您可以编辑~/.bashrc并将 NVM 的 init 移动到文件的顶部,就在警卫上方。

更安全的是复制NVM init 使其出现两次。PATH当其他行正在修改after NVM时,这将解决其他答案中提到的问题。NVM 似乎并不介意运行两次,尽管它确实会稍微减慢 shell 启动速度。

于 2021-03-09T08:50:20.857 回答
0

在来自 github 的 nvm 自动加载脚本中,我不得不 chage

local node_version="$(nvm version)"local node_version="$(node -v)"

在我的路径中,我的系统上有一个本地安装的 nvm,所以无论如何都要nvm version说系统

于 2021-05-14T08:06:16.350 回答
0
export NVM_DIR="$HOME/.nvm"
  [ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh"  # This loads nvm
  [ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && . "/usr/local/opt/nvm/etc/bash_completion.d/nvm"  # This loads nvm bash_completion

# place this after nvm initialization!
autoload -U add-zsh-hook

load-nvmrc() {
  local node_version="$(nvm version)"
  local nvmrc_path="$(nvm_find_nvmrc)"

  if [ -n "$nvmrc_path" ]; then
    local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")

    if [ "$nvmrc_node_version" = "N/A" ]; then
      nvm install
    elif [ "$nvmrc_node_version" != "$node_version" ]; then
      nvm use
    fi
  elif [ "$node_version" != "$(nvm version default)" ]; then
    echo "Reverting to nvm default version"
    nvm use default
  fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
于 2021-05-29T05:37:07.750 回答
0

1.- 通过自制软件安装

2.- 因为我使用的是 zsh 终端,所以在 ~/.zshrc添加此行时,如果您使用的是 bash,则需要将这些行放入~/.bash_profile

export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh
于 2022-02-16T22:16:18.153 回答
-2

此外,如果您在nvm之前安装了节点,请检查您的~/.bash_profile是否没有类似的内容:

export PATH=/bin:/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:$PATH

如果确实有,请注释/删除它,nvm应该开始处理默认节点版本。

于 2016-12-03T23:56:18.217 回答