-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnodejs.sh
More file actions
106 lines (98 loc) · 3.67 KB
/
Copy pathnodejs.sh
File metadata and controls
106 lines (98 loc) · 3.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/bin/sh
# Node.js (LTS) bootstrapper
# https://nodejs.org/
APP_NAME="Node.js"
OS=$(uname -s)
ARCH=$(uname -m)
detect_distro() {
DISTRO=""
if [ -f /etc/os-release ]; then
. /etc/os-release
case "$ID $ID_LIKE" in
*arch*) DISTRO="arch" ;;
*debian*|*ubuntu*) DISTRO="debian" ;;
*fedora*|*rhel*|*centos*) DISTRO="fedora" ;;
esac
fi
if [ -z "$DISTRO" ]; then
command -v pacman >/dev/null 2>&1 && DISTRO="arch"
command -v dpkg >/dev/null 2>&1 && DISTRO="debian"
command -v rpm >/dev/null 2>&1 && DISTRO="fedora"
fi
}
set -e
case "$OS" in
Darwin)
if command -v brew >/dev/null 2>&1; then
echo "Installing ${APP_NAME} (LTS) via Homebrew..."
brew install node
elif command -v port >/dev/null 2>&1; then
echo "Installing ${APP_NAME} via MacPorts..."
sudo port install nodejs22
else
echo "Error: no package manager found. Install Homebrew first:" >&2
echo " /bin/bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"" >&2
exit 1
fi
echo "Done! $(node --version)"
;;
Linux)
detect_distro
case "$DISTRO" in
debian)
echo "Detected: Debian/Ubuntu — installing via NodeSource LTS..."
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
;;
fedora)
echo "Detected: Fedora/RHEL — installing via NodeSource LTS..."
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -
sudo dnf install -y nodejs
;;
arch)
echo "Detected: Arch/Manjaro — installing via pacman..."
sudo pacman -Syu --noconfirm nodejs npm
;;
*)
echo "Error: unsupported distro. Install Node.js from https://nodejs.org/" >&2
exit 1
;;
esac
echo "Done! $(node --version)"
;;
MINGW*|CYGWIN*|MSYS*)
echo "Installing ${APP_NAME} (LTS) for Windows..."
if command -v winget.exe >/dev/null 2>&1; then
winget.exe install --id OpenJS.NodeJS.LTS -e --source winget
echo "Done! Restart your terminal for PATH changes to apply."
elif command -v choco >/dev/null 2>&1; then
choco install nodejs-lts -y
elif command -v scoop >/dev/null 2>&1; then
scoop install nodejs-lts
else
echo "Fetching latest LTS version from nodejs.org..."
LTS_VERSION=$(curl -fsSL "https://nodejs.org/dist/index.json" \
| tr '{' '\n' | grep '"lts":"' | head -1 \
| grep -o '"version":"v[^"]*"' | sed 's/"version":"v\([^"]*\)".*/\1/')
if [ -z "$LTS_VERSION" ]; then
echo "Error: could not fetch LTS version. Download from https://nodejs.org/" >&2
exit 1
fi
case "$ARCH" in
arm64) NODE_ARCH="arm64" ;;
*) NODE_ARCH="x64" ;;
esac
FILENAME="node-v${LTS_VERSION}-${NODE_ARCH}.msi"
DOWNLOAD_URL="https://nodejs.org/dist/v${LTS_VERSION}/${FILENAME}"
echo "Downloading: ${DOWNLOAD_URL}"
DEST="${TEMP}/nodejs-installer.msi"
curl -fSL -o "$DEST" "$DOWNLOAD_URL"
echo "Launching installer..."
cmd.exe /c start "" "$DEST"
fi
;;
*)
echo "Error: unsupported OS: $OS" >&2
exit 1
;;
esac