在 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
安装以及官方安装脚本。
我的 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
任何线索我做错了什么?
.bash_profile
而不是您的 .bashrc
导出
试试 nvm alias default
。例如:
$ nvm alias default 0.12.7
这会在您的 shell 中设置默认节点版本。然后通过关闭 shell 窗口、打开一个新窗口来验证更改是否仍然存在,然后:node --version
node
本身的别名,以避免稍后更新默认别名以及节点版本更新。
nvm alias default node
export NVM_DIR=....
移动到最后 2.如果这也不起作用,卸载 nvm 并重新安装并安装您想要的节点版本不要花费太多时间找到解决办法。重新安装非常快
就我而言,另一个程序已将 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 中的一个错误,但我可能弄错了。)
\.
与 source
相同。 [ -s ... ]
只是检查文件是否存在且不为空。如果您问为什么不将源代码行just移到底部,并将 export NVM_DIR
留在原来的位置,唯一的原因是为了清楚起见,将 NVM 行保持在一起。如果你愿意,你可以把它们分开。
要安装最新的稳定版本:
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
的建议可以帮助用户直观地了解他们的版本控制正在发生什么。谢谢!
nvm 通过更改 PATH 变量来完成其工作,因此您需要确保在获取 nvm.sh 脚本后不会以某种方式将 PATH 更改为其他内容。
就我而言,在 .bashrc 中调用了 nvm.sh ,但随后在 .bash_profile 中更新了 PATH 变量,这导致我的会话在 nvm 节点之前找到系统节点。
nvm alias default
和 nvm use
设置为我需要的版本。
.bashrc
的底部:export NVM_DIR="$HOME/.nvm"
然后 . "/usr/local/opt/nvm/nvm.sh"
这是一个简单的指令:
1)安装:
nvm install 8.10.0
2) 每个终端使用一次
nvm use 8.10.0
3)设置为所有终端的默认值
nvm alias default 8.10.0
您可能需要使用 root 权限来执行这些操作。
不要忘记查看 nvm documentation 了解更多信息。
https://i.stack.imgur.com/Pwkpq.png
评价最高的解决方案似乎对我不起作用。我的解决方案如下:
使用 homebrew 完全卸载 nvm:brew uninstall nvm 重新安装 brew install nvm 在终端中,按照以下步骤操作(通过 homebrew 安装 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 安装中列出)
如果你已经尝试了一切仍然没有运气,你可以试试这个:_
1 -> 卸载 NVM
rm -rf ~/.nvm
2 ->按照 this 删除 npm 依赖项
-> Install NVM
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
->设置 ~/.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
保存更改
->运行 . ~/.bash_profile
7 ->现在您应该在您的机器上安装了 nvm
,安装节点运行 nvm install v7.8.0
这将是默认节点版本,或者您可以安装任何版本的节点
sudo
提升权限。我将编辑要删除的答案,因为这里的特权升级似乎没有任何好处,因为答案在主目录中有效。如果不是这样,我很想知道为什么——谢谢!
我正在使用 ZSH,因此我必须按顺序使用有关 NVM 的行修改 ~/.zshrc
:
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
source ~/.nvm/nvm.sh
这些解决方案在我的环境中都不起作用,无论如何,nvm 似乎总是加载第一个安装的节点版本(除非您通过 nvm use
临时更改它)。
更改我发现的默认值的唯一方法是:
清除 nvm 缓存:清除 nvm 缓存
将默认设置为所需版本:nvm alias default 12(或任何版本)
切换到所需版本:nvm use 12
卸载所有其他版本: nvm ls(列出安装) nvm uninstall x(为每个非默认安装运行)
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
新终端现在应该尊重默认版本。
这个问题已经针对 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
v
。例如 v4.2.4
而不是 4.2.4
。
例如,执行 nvm install 10.14
将 nvm use
当前 shell 会话的该版本,但它不会总是将其设置为您所期望的未来会话的默认值。您在新的 shell 会话中获得的节点版本由 nvm alias default
确定。令人困惑的是,nvm install
只会在尚未设置的情况下设置默认别名。要获得预期的行为,请执行以下操作:
nvm alias default ''; nvm install 10.14
这将确保下载该版本,将其用于当前会话并将其设置为未来会话的默认值。
安装任何版本后运行它,
n=$(which node);n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr/local
该命令将通过 nvm 将任何版本的节点复制到 /usr/local/ 目录并设置权限,以便所有用户都可以访问它们。
&&
而不是 ;
。如果 which
找不到节点,我们不想继续 chmod /bin/*
!
我在这里找到了一条新路。使用 n
Interactively Manage Your Node.js 会有所帮助。
fish
shell,但接受的答案对我不起作用。 n
好用!
我将 NVM 与 zsh bash 一起使用
按照此链接删除 nvm
$ 酿造安装 nvm
我在安装后运行了这一行 $ source $(brew --prefix nvm)/nvm.sh 并重新启动终端
将下面的行放在 ~/.zshrc 文件中,同样由 nvm 官方 GitHub 页面指示
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
nvm use default >> /dev/null 2>&1
我使用 zsh 并且发现接受的答案不起作用。我认为在 zsh 上,这可能是最好的(唯一的?)选择。
出于某种原因,在我的 .bashrc 文件中,我发现了这个:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" --no-use # This loads nvm
并且不得不删除 --no-use 标志,我不记得把它放在首位......只是另一件事要检查。
如果您也有 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
在 VS Code 编辑器中使用集成终端时,我遇到了同样的问题。使用 nvm 更改节点版本后重新启动 VS Code 为我解决了这个问题。
$ nvm alias default {NODE_VERSION}
当我们使用上述命令时,只更新节点版本,但 npm
仍然使用旧版本。
这是同时更新 node
和 npm
的另一种解决方案,在我的情况下,我想使用节点 8.9.4
,并且我使用了以下命令。
$ nvm use default 8.9.4
该命令返回输出。
现在使用节点 v8.9.4 (npm v5.6.0)
如存储库的问题部分所述,nvm use
仅适用于 shell 的整个生命周期。我发现这非常有用,但有时当您处理需要不同版本代码的不同代码库时,它实际上可能会给您带来麻烦。这是 GitHub 中相关讨论的 link
在 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,使其出现两次。当其他行在 NVM 之后修改 PATH
时,这将解决其他答案中提到的问题。 NVM 似乎并不介意运行两次,尽管它确实会稍微减慢 shell 启动速度。
在来自 github 的 nvm 自动加载脚本中,我不得不 chage
local node_version="$(nvm version)"
到 local node_version="$(node -v)"
在我的路径中,我的系统上有一个本地安装的 nvm,所以 nvm version
一直说 system 无论如何
1.- 通过自制软件安装
2.- 因为我使用的是 zsh 终端,所以在 ~/.zshrc
添加此行,如果您使用的是 bash,则需要将这些行放入 ~/.bash_profile
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh
此外,如果您在 nvm 之前安装了节点,请检查您的 ~/.bash_profile 是否没有类似的内容:
export PATH=/bin:/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:$PATH
如果确实有,请注释/删除它,nvm 应该开始处理默认节点版本。
.bash_profile
(或.bashrc
或其他)中,您在source xx/nvm.sh
之后没有任何修改PATH
nvm
的更高版本中指定lts
版本。例如:nvm alias default lts/boron