当在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
你知道我哪里做错了吗?
在我的例子中,另一个程序向.bashrc添加了PATH更改
如果其他程序在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。在我看来,这是一个错误,但我可能是错的。
如果你已经尝试了所有的方法仍然没有运气,你可以试试这个:_
1 -> 卸载 NVM
rm -rf ~/.nvm
按照下面的步骤移除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
现在你应该在你的机器上安装了nvm,要安装节点运行nvm install v7.8.0,这将是默认的节点版本,或者你可以安装任何版本的节点
在Ubuntu上,如果你运行一个非交互的shell,比如cronjob, init或者upstart脚本,就会有一个潜在的问题。
Ubuntu默认的.bashrc在顶部有这个保护,如果shell是非交互式的,它会提前退出:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
因此,为了为非交互式脚本加载NVM,可以编辑~/。将NVM的init移到文件的顶部,就在guard的上面。
更安全的方法是复制NVM init,使其出现两次。这将解决其他答案中提到的问题,当其他行在NVM之后修改PATH时。NVM似乎并不介意被运行两次,尽管它确实会降低shell启动速度。
这些解决方案在我的环境中都不起作用,nvm似乎总是加载node的第一个安装版本(除非你通过nvm使用临时更改它)。
我发现改变默认值的唯一方法是:
Clear nvm cache:清除nvm缓存
将默认设置为所需的版本:nvm alias默认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
新终端现在应该尊重默认版本。