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