mac nodejs

This commit is contained in:
shocknet-justin 2025-11-26 21:55:50 -05:00
parent ed38dc28b5
commit 35ac191dd7

View file

@ -2,14 +2,80 @@
install_nodejs() { install_nodejs() {
USER_HOME=$HOME USER_HOME=$HOME
USER_NAME=$(whoami) MINIMUM_VERSION="24.0.0"
export NVM_DIR="$USER_HOME/.nvm"
log "${PRIMARY_COLOR}Checking${RESET_COLOR} for Node.js..." log "${PRIMARY_COLOR}Checking${RESET_COLOR} for Node.js..."
MINIMUM_VERSION="18.0.0"
if [ "$OS" = "Mac" ]; then
install_nodejs_mac
else
install_nodejs_linux
fi
}
install_nodejs_mac() {
# Check if node exists and meets minimum version
if command -v node &> /dev/null; then
NODE_VERSION=$(node -v | sed 's/v//')
if [ "$(printf '%s\n' "$MINIMUM_VERSION" "$NODE_VERSION" | sort -V | head -n1)" = "$MINIMUM_VERSION" ]; then
log "Node.js is already installed and meets the minimum version requirement."
return 0
fi
fi
log "Node.js is not installed or outdated. ${PRIMARY_COLOR}Installing...${RESET_COLOR}"
# Get latest LTS version from Node.js
local node_index=$(download_stdout "https://nodejs.org/dist/index.json")
local lts_version=$(echo "$node_index" | grep -o '"version":"v[0-9.]*","date":"[^"]*","files":\[[^]]*\],"npm":"[^"]*","v8":"[^"]*","uv":"[^"]*","zlib":"[^"]*","openssl":"[^"]*","modules":"[^"]*","lts":"[^"]*"' | grep -v '"lts":false' | head -1 | grep -o '"version":"v[^"]*"' | awk -F'"' '{print $4}')
if [ -z "$lts_version" ]; then
log "Failed to fetch Node.js LTS version."
return 1
fi
log "Installing Node.js ${lts_version}..."
local node_arch="x64"
[ "$ARCH" = "arm64" ] && node_arch="arm64"
local node_url="https://nodejs.org/dist/${lts_version}/node-${lts_version}-darwin-${node_arch}.tar.gz"
local node_tar="$USER_HOME/node.tar.gz"
download "$node_url" "$node_tar" || {
log "Failed to download Node.js."
return 1
}
# Extract to ~/node
rm -rf "$USER_HOME/node"
mkdir -p "$USER_HOME/node"
tar -xzf "$node_tar" -C "$USER_HOME/node" --strip-components=1 || {
log "Failed to extract Node.js."
rm -f "$node_tar"
return 1
}
rm -f "$node_tar"
# Add to PATH for current session
export PATH="$USER_HOME/node/bin:$PATH"
# Add to shell profile if not already there
local shell_profile="$USER_HOME/.zshrc"
[ -f "$USER_HOME/.bash_profile" ] && shell_profile="$USER_HOME/.bash_profile"
if ! grep -q 'node/bin' "$shell_profile" 2>/dev/null; then
echo 'export PATH="$HOME/node/bin:$PATH"' >> "$shell_profile"
fi
log "Node.js ${lts_version} installation completed."
return 0
}
install_nodejs_linux() {
export NVM_DIR="$USER_HOME/.nvm"
# Load nvm if it already exists # Load nvm if it already exists
export NVM_DIR="${NVM_DIR}"
[ -s "${NVM_DIR}/nvm.sh" ] && \. "${NVM_DIR}/nvm.sh" [ -s "${NVM_DIR}/nvm.sh" ] && \. "${NVM_DIR}/nvm.sh"
if ! command -v nvm &> /dev/null; then if ! command -v nvm &> /dev/null; then
@ -19,13 +85,10 @@ install_nodejs() {
return 1 return 1
fi fi
log "Installing NVM ${NVM_VERSION}..." log "Installing NVM ${NVM_VERSION}..."
download_stdout "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" | bash download_stdout "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh" | bash > /dev/null 2>&1
[ -s "${NVM_DIR}/nvm.sh" ] && \. "${NVM_DIR}/nvm.sh"
fi fi
# Source NVM
export NVM_DIR="${NVM_DIR}"
[ -s "${NVM_DIR}/nvm.sh" ] && \. "${NVM_DIR}/nvm.sh"
if ! command -v nvm &> /dev/null; then if ! command -v nvm &> /dev/null; then
log "NVM installation failed." log "NVM installation failed."
return 1 return 1
@ -43,7 +106,6 @@ install_nodejs() {
log "Node.js is not installed. ${PRIMARY_COLOR}Installing the LTS version...${RESET_COLOR}" log "Node.js is not installed. ${PRIMARY_COLOR}Installing the LTS version...${RESET_COLOR}"
fi fi
# Install Node.js LTS
if ! nvm install --lts > /dev/null 2>&1; then if ! nvm install --lts > /dev/null 2>&1; then
log "${PRIMARY_COLOR}Failed to install Node.js.${RESET_COLOR}" log "${PRIMARY_COLOR}Failed to install Node.js.${RESET_COLOR}"
return 1 return 1