nvm在新的终端会话中保留“忘记”节点


544

在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的酿造版本:

#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

关于我在做什么错的任何线索吗?


1
只是想在这里补充这一点-确保您从中导出.bash_profile,而不是你.bashrc
James111

Answers:


1180

尝试nvm alias default。例如:

$ nvm alias default 0.12.7

这将在您的Shell中设置默认节点版本。然后关闭外壳窗口,打开一个新窗口,以确认更改是否仍然存在,然后: node --version


11
这不是nvm使用的工作吗?后$ nvm alias default 0.11.13$ nvm use 0.11.12,我得到node --version = 0.11.12。尽管如此,在新会话中,节点又消失了。在debian中,我根本没有这个问题。
2014年

4
好的,我有错别字:nvm alias defaul X。使用正确的用法,它实际上可以工作。我想,工作流程将是nvm install X那时nvm alias default X。感谢您的帮助!
2014年

21
我遇到了同样的问题,这是因为我正在导出NVM_DIRafter nvm.sh。确保先导出NVM_DIR
maxwell2022

11
注意,nvm alias default不会为当前环境设置节点版本,而只是为所有新环境设置节点版本。
ericsoco's

27
如果那行不通,请确保您.bash_profile(或.bashrc其他任何人)PATH在此之后没有任何修改source xx/nvm.sh
好人风

85

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

nvm alias default node

2
!警告:版本“节点”不存在。默认->节点(-> N / A)?
House3272

6
node alias default stable
皮埃尔·亨利

1
我认为您不想再使用stable了。来自nvm文档:“稳定:不建议使用此别名,并且仅真正适用于节点v0.12和更早的版本。当前,这是节点的别名。”
pherris '16

1
node该默认为哪个?NVM在当前shell中安装和使用的Node,或者可能是通过Node的安装包或Homebrew等在系统上安装的Node?
2540625 '16

7
(这里是nvm维护者)node(和stable,但是semver中发布的所有内容都是稳定的,因此现在已经没有用了)使用最新的可用版本。对于本地命令,最新安装;有关远程命令的最新信息。
LJHarb

40

要安装最新的稳定版本:

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)

这非常有效,使用建议可以nvm list帮助用户直观地了解其版本管理中发生的情况。谢谢!
Solvitieg

30

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

如果其他程序PATH nvm初始化之后进行了PATH更改,则nvm的更改将被忘记,我们将获得系统节点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中的错误,但我可能会误会。)


1
这对我有帮助!默认卡住了。
Redsandro

1
给这个家伙一块奖牌!NVM_DIR导出后,我在zshrc中额外加载了其他* rc文件,这使我发疯了。谢谢!
bobbytables

谢谢!这让我疯狂。

27

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

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


1
我该如何检查?我怀疑是这种情况。
轻微的绒毛,2015年

这是我的情况,谢谢!我将导出文件放在.zshrc文件的顶部,只需将其移到底部,问题就解决了
Alejandro Silva

那是我的情况。解决方案是将NVM〜/ .bash_profile条目移到文件+ set的末尾,nvm alias defaultnvm use移至所需的版本。
Eugene Tartakovsky

这是我的解决方案。将以下内容移至底部.bashrcexport NVM_DIR="$HOME/.nvm"然后. "/usr/local/opt/nvm/nvm.sh"
asmiller

10

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

  1. 使用Homebrew完全卸载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的等效配置文件。使用自制软件在NVM安装中列出)


7

如果您尝试了所有一切仍然没有运气,可以尝试以下方法:_

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它将是默认的节点版本,或者您可以安装任何版本的节点


1
非常感谢!这也是唯一在bash中设置节点路径并为我工作的解决方案。我只是使用“ nvm安装节点”来安装最新的节点版本,而不是使用“ nvm安装v7.8.0”
user3492435

5

这个问题已经提到过OSX,但是在我的Linux OS中却发生了。我尝试使用,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

描述性解决方案链接


1
仅需注意,这取决于在v设置遥控器时将包括在版本中。例如,v4.2.4而不是4.2.4
vaughan

4

nvm install 10.14例如,这样做会nvm use为当前的Shell会话提供该版本,但不会像您期望的那样始终将其设置为将来会话的默认版本。在新的Shell会话中获得的节点版本由决定nvm alias default。令人困惑的是,nvm install只会设置默认别名(如果尚未设置)。要获得预期的行为,请执行以下操作:

nvm alias default ''; nvm install 10.14

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


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 /目录中,并设置权限,以便所有用户都可以访问它们。


我建议在该命令中使用&&s而不是;s。如果which找不到节点,我们不想继续chmod /bin/*
joeytwiddle


2

我使用的是ZSH,因此我不得不按~/.zshrc与NVM有关的顺序进行修改:

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
source ~/.nvm/nvm.sh

1
$ nvm alias default {NODE_VERSION}

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

这是同时更新node和的另一种解决方案npm,在我的情况下,我想使用node,8.9.4并且使用了以下命令。

$ nvm use default 8.9.4

然后该命令返回输出。

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


0

如果您还有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

0

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


0

这是一个简单的指令:

1)安装:

nvm install 8.10.0

2)每个终端一次使用

nvm use 8.10.0

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

nvm alias default 8.10.0

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

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

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


-2

同样,如果您在nvm之前安装了节点,请在〜/ .bash_profile中检查以下内容:

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

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


当然,设置路径变量与nvm版本选择无关。
sn0r

设置后, nvm.sh应该修改您的PATH (例如,使用上面的代码)。这使nvm将其版本目录放在节点的“系统”版本所在的/ usr / local / bin 之前
丹尼斯·豪

-3

经过长时间与该问题的冲突,我找到了解决方法。这是该问题的分步解决方案:

  • 打开终端并安装命令行开发人员工具:

    xcode-select --install

  • 按回车

  • 安装最新版本的NVM:

    cd ~/

  • 按回车

    git clone https://github.com/creationix/nvm.git .nvm

  • 按回车
  • 如果您之前已经创建了.nvm文件夹,则将看到下一条错误消息:

    fatal: destination path '.nvm' already exists and is not an empty directory.

    否则,您将看到克隆过程一直运行到完成为止。

  • 查看最新的NVM版本:

    cd ~/.nvm

  • 按回车

    git checkout v0.34.0

    您将收到类似于以下内容的回复:

    HEAD is now at 3d9c31d v0.34.0

    在不同的系统上版本可能有所不同。

    ls

  • 按回车

    . nvm.sh

  • 按回车

    nvm list

  • 按回车

    您会看到计算机上安装了不同的节点版本,可能会有一些错误,请不要引起他们的注意。

    nvm ls-remote | tail -n9

  • 按回车

    nvm list

  • 使用vim打开bash:

    vim ~/.bash_profile

  • 在vim编辑器中,按:i进入INSERT mode并开始新的一行。如果编辑时有任何错误,请ESC按键,然后:q!不保存即退出。

    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

  • 按下ESC按键时,编辑完的文件(你会看到插入模式消失)。

  • :wq保存文件。
  • 按回车

    nvm ls-remote | tail -n9

  • 按Enter键并安装显示的最新nvm版本:

    nvm install 12.6.0

  • 该过程完成后,您将看到: Now using node v12.6.0 (npm v6.9.0)

  • 您可以通过按以下命令检查安装是否成功:

    node -vnpm -v,它应该显示系统上安装的nvm和npm的版本。

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.