如何配置我的shell,使nvm use
在每次目录中有.nvmrc文件时自动运行,并在没有.nvmrc文件时使用最新版本或全局配置?
发布于 2021-11-07 02:01:46
对于那些使用Apple Silicon (M1) may的用户,您可能已经注意到,NVM尝试从nvm install
上的源代码编译Node16版以下的版本,但失败了。以下是@Rotareti's and @Reynke's answer的更新,它使用Rosetta为Node < 16安装x86_64版本,同时为Node >= 16安装原生ARM版本,因为Node16是支持Apple Silicon的最早版本。
安装后,您可以从本机终端或rosetta终端使用nvm use
来使用正确的版本,因此只有原始函数的nvm install
部分会发生变化。
将/opt/homebrew/opt/nvm/nvm.sh
替换为nvm安装的路径。
~/.zshrc
# 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
# check if we're in a native (ARM) terminal
if [[ $(uname -p) == "arm" ]]; then
local nvmrc_remote_version=$(nvm version-remote "$(cat "${nvmrc_path}")")
if printf '%s\n%s\n' v16.0.0 "${nvmrc_remote_version}" | sort -VC; then
# arm and node >= v16; install native node
nvm install
else
# arm and node < v16; install x64 node using rosetta
arch -x86_64 zsh -c '. "/opt/homebrew/opt/nvm/nvm.sh"; nvm install'
nvm use
fi
else
# not arm
nvm install
fi
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
https://stackoverflow.com/questions/23556330
复制相似问题