nvm在新的终端会话中保持"遗忘"节点

frh*_*rhd 514 macos homebrew node.js npm nvm

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

$ nvm ls:

         .nvm
     v0.11.12
     v0.11.13
Run Code Online (Sandbox Code Playgroud)

我必须nvm use v.0.11.13在每个会话中继续打击:

         .nvm
     v0.11.12
->   v0.11.13
Run Code Online (Sandbox Code Playgroud)

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

.profile的brew版本:

#nvm
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh
Run Code Online (Sandbox Code Playgroud)

对于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
Run Code Online (Sandbox Code Playgroud)

我有什么不对的任何线索?

dyl*_*nts 1126

试试nvm alias default.例如:

$ nvm alias default 0.12.7

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

  • 如果这不起作用,请确保在`.bash_profile`(或`.bashrc`或其他)中,在源xx/nvm.sh之后没有任何修改`PATH`的内容 (23认同)
  • 我遇到了同样的问题,因为我在`nvm.sh`之后导出`NVM_DIR`.确保之前导出`NVM_DIR`. (20认同)
  • 这不是nvm使用的工作吗?在`$ nvm alias default 0.11.13`和`$ nvm use 0.11.12`之后,我得到`node --version = 0.11.12`.但是,在新的会话中,节点再次消失.在debian中,我根本没有这个问题. (9认同)
  • 请注意,`nvm alias default`不会为当前环境设置节点版本,仅适用于所有新环境. (9认同)
  • 好吧,我有一个错字:'nvm alias defaul X`.正确使用它实际上是有效的.因此工作流程将是`nvm install X`然后``nvm alias default X`,我猜.谢谢你的帮助! (4认同)
  • `nvm use`将为当前环境设置它,`nvm alias default`将为任何新shell设置它.所以,如果你运行`nvm alias default v0.11.13`然后打开一个新shell,`which node`什么都不返回? (2认同)
  • 不适合我,而且我没有遇到麦克斯韦所说的问题。我没有使用brew,但我升级/重新安装了我的nvm并修复了它。 (2认同)

小智 78

别名为node自身以避免更新默认别名以及稍后的节点版本更新.

nvm alias default node
Run Code Online (Sandbox Code Playgroud)

  • 那么`node alias default stable`怎么样? (6认同)
  • (这里是nvm维护者)`node`(和`stable`,但是semver中发布的所有内容都是稳定的,所以现在这是一个无用的单词)使用最新的可用版本.对于本地命令,最新安装; 用于远程命令,最新可用. (6认同)
  • !警告:版本"节点"不存在.默认 - >节点( - > N/A)? (2认同)
  • 这实际上比别名到特定版本(另一个答案)更好。这也是 https://github.com/creationix/nvm#install-script 建议的方法。 (2认同)

ohh*_*hho 39

要安装最新的稳定版本:

nvm install stable
Run Code Online (Sandbox Code Playgroud)

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

nvm alias default stable
Run Code Online (Sandbox Code Playgroud)

列出已安装的版本:

nvm list
Run Code Online (Sandbox Code Playgroud)

截至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)
Run Code Online (Sandbox Code Playgroud)


pro*_*ngo 33

这些解决方案在我的环境中都不起作用,无论如何,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
Run Code Online (Sandbox Code Playgroud)

或者作为一句单行:

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
Run Code Online (Sandbox Code Playgroud)

新终端现在应该遵循默认版本。


Ars*_*-II 31

这是一个简单的说明:

1)安装:

nvm install 8.10.0
Run Code Online (Sandbox Code Playgroud)

2) 每个终端使用一次

nvm use 8.10.0
Run Code Online (Sandbox Code Playgroud)

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

nvm alias default 8.10.0
Run Code Online (Sandbox Code Playgroud)

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

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

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


Jef*_*els 23

nvm通过更改PATH变量来完成它的工作,所以你需要确保在获取nvm.sh脚本后你不会以某种方式将PATH更改为其他东西.

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


joe*_*dle 22

在我的情况下,另一个程序添加了PATH更改.bashrc

如果其他程序改变了PATH nvm的初始化,那么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"
Run Code Online (Sandbox Code Playgroud)

解:

### 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
Run Code Online (Sandbox Code Playgroud)

(这与CentOS上的bash 4.2.46一样.在我看来,就像bash中的一个bug,但我可能会弄错.)

  • 给这个家伙一枚勋章!在 NVM_DIR 导出之后,我在 zshrc 中额外加载了其他 *rc 文件,这让我发疯。谢谢你! (4认同)

Joe*_*Joe 9

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

  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的等同配置文件.(再次从最新拍摄在使用自制软件的NVM安装中列出)


sou*_*der 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
Run Code Online (Sandbox Code Playgroud)

描述性解决方案链接


Ana*_*and 6

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

1->卸载NVM

rm -rf ~/.nvm
Run Code Online (Sandbox Code Playgroud)

2 - >删除NPM依赖性按照

3-> 安装NVM

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

5-> CONTROL + X保存更改

6->运行 . ~/.bash_profile

7->现在您应该已经nvm安装在计算机上,要运行nvm install v7.8.0该节点,将使用默认节点版本,也可以安装任何版本的节点


Mat*_*ler 5

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

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
source ~/.nvm/nvm.sh
Run Code Online (Sandbox Code Playgroud)


Al *_*han 5

Linux/Ubuntu

如何解决这个问题你可以在这里看到

nvm use并不意味着持续存在 - 它只是在 shell 的生命周期内。

nvm alias default node如果您希望在打开新 shell 时将其设置为默认值,您可以这样做,或者您可以创建一个.nvmrc文件,该文件将优先于当前目录中的任何位置(向上到/. https://github.com/nvm-sh/nvm/issues/658

ubutnu 终端