84 lines
1.9 KiB
Bash
Executable File
84 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
##makedesc: Install nodejs + npm via nvm
|
|
|
|
set -eo pipefail
|
|
|
|
installed() { command -v "$1" >/dev/null 2>&1; }
|
|
|
|
isMac() { [ "$(uname -s)" = "Darwin" ]; }
|
|
isLinux() { [ "$(uname -s)" = "Linux" ]; }
|
|
|
|
NVM_DIR="${NVM_DIR:-$HOME/.nvm}"
|
|
|
|
install() {
|
|
echo
|
|
echo "==============================================="
|
|
echo "Installing nodejs + nvm"
|
|
echo "==============================================="
|
|
echo
|
|
|
|
if isMac; then
|
|
if installed brew; then
|
|
brew install nvm
|
|
else
|
|
echo "ERROR: Install Homebrew first." >&2
|
|
exit 1
|
|
fi
|
|
elif isLinux; then
|
|
curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
|
|
else
|
|
echo "ERROR: This OS is not supported yet!" >&2
|
|
exit 1
|
|
fi
|
|
|
|
export NVM_DIR="$HOME/.nvm"
|
|
[ -s "$NVM_DIR/nvm.sh" ] && source "$NVM_DIR/nvm.sh"
|
|
[ -s "$NVM_DIR/bash_completion" ] && source "$NVM_DIR/bash_completion"
|
|
|
|
nvm install-latest-npm
|
|
nvm install node
|
|
nvm use node
|
|
|
|
if ! grep -q 'NVM_DIR' "$HOME/.profile" 2>/dev/null; then
|
|
cat << EOF >> "$HOME/.profile"
|
|
|
|
# nvm (not nvim!)
|
|
export NVM_DIR="\$HOME/.nvm"
|
|
[ -s "\$NVM_DIR/nvm.sh" ] && source "\$NVM_DIR/nvm.sh"
|
|
[ -s "\$NVM_DIR/bash_completion" ] && source "\$NVM_DIR/bash_completion"
|
|
|
|
EOF
|
|
fi
|
|
|
|
echo
|
|
echo "Finish!"
|
|
nvm current
|
|
echo
|
|
}
|
|
|
|
remove() {
|
|
echo
|
|
echo "==============================================="
|
|
echo "Removing nodejs + nvm"
|
|
echo "==============================================="
|
|
echo
|
|
|
|
if command -v nvm >/dev/null 2>&1; then
|
|
nvm unload 2>/dev/null || true
|
|
fi
|
|
rm -rf "$NVM_DIR"
|
|
sed -i '/NVM_DIR/d' "$HOME/.profile" 2>/dev/null || true
|
|
if isMac && installed brew; then
|
|
brew uninstall nvm 2>/dev/null || true
|
|
fi
|
|
|
|
echo
|
|
echo "Finish!"
|
|
echo
|
|
}
|
|
|
|
case "$1" in
|
|
r|remove|d|delete|p|purge) remove ;;
|
|
*) install ;;
|
|
esac
|