快速切换当前 Shell 会话的 node 版本

node_switch 18
node_switch 20
node_switch 22
node_switch 24
NODE_HOME_18=/opt/homebrew/opt/node@18
NODE_HOME_20=/opt/homebrew/opt/node@20
NODE_HOME_22=/opt/homebrew/opt/node@22
NODE_HOME_24=/opt/homebrew/opt/node@24
NODE_HOME=$NODE_HOME_22

node_switch() {
  local version="$1"
  if [[ -z "$version" ]]; then
    echo "Usage: node_switch <version> (e.g., 18, 20, 22, 24)"
    return 1
  fi

  local node_home_path

  case "$version" in
  18) node_home_path="$NODE_HOME_18" ;;
  20) node_home_path="$NODE_HOME_20" ;;
  22) node_home_path="$NODE_HOME_22" ;;
  24) node_home_path="$NODE_HOME_24" ;;
  *)
    echo "Error: Node version $version not found."
    echo "Available versions: 18, 20, 22, 24"
    return 1
    ;;
  esac

  if [[ -z "$node_home_path" || ! -d "$node_home_path/bin" ]]; then
    echo "Error: Node version $version not found or invalid."
    echo "Available versions: 18, 20, 22, 24"
    return 1
  fi

  local new_path=""

  echo "$PATH" | tr ':' '\n' | while read -r dir; do
    if [[ ! "$dir" =~ node@ ]]; then
      if [ -z "$new_path" ]; then
        new_path="$dir"
      else
        new_path="$new_path:$dir"
      fi
    fi
  done

  export PATH="$node_home_path/bin:$new_path"
  export NODE_HOME="$node_home_path"
  echo "Switched to Node.js $version ($node_home_path)"
  echo "Node version: $(node --version 2>/dev/null || echo 'not found')"
}

export PATH=$NODE_HOME/bin:$NODE_GLOBAL/bin:$PATH