#!/bin/bash | |
# node-reinstall | |
# credit: http://stackoverflow.com/a/11178106/2083544 | |
## program version | |
VERSION="0.0.13" | |
## path prefix | |
PREFIX="${PREFIX:-/usr/local}" | |
## version control systems | |
USE_NAVE=0 | |
USE_NVM=1 | |
# use --force to bypass user confirmation | |
FORCE=0 | |
## default node version | |
NODE_VERSION="0.10" | |
usage () { | |
printf "%s\n" "node-reinstall" | |
printf "\t%s\n" "completely re-installs Node & NPM and any global node modules." | |
printf "\t%s\n" "It re-installs Node using NVM or Nave" | |
printf "\n" | |
printf "%s\t%s\n" "Usage:" "node-reinstall [--nave|--nvm|--nvm-latest] [-h|--help] [-v|--version] [NODE_VERSION]" | |
printf "\n" | |
printf "%s\n" "Commands:" | |
printf "\n" | |
printf "\t%s\t\t\t%s\n" "node-reinstall" "re-install node and npm using nvm" | |
printf "\t%s %s\t%s\n" "node-reinstall" "[-h|--help]" "show help" | |
printf "\t%s %s\t%s\n" "node-reinstall" "[-v|--version]" "show the node-reinstall version number" | |
printf "\t%s %s\t%s\n" "node-reinstall" "[-f|--force]" "installs defaults without user confirmation" | |
printf "\t%s %s\t\t%s\n" "node-reinstall" "--nave" "re-install using nave" | |
printf "\t%s %s\t\t%s\n" "node-reinstall" "--nvm" "re-install using stable nvm - the default" | |
printf "\t%s %s\t%s\n" "node-reinstall" "--nvm-latest" "re-install using latest nvm - creationix/nvm:master" | |
printf "\t%s %s\t\t%s\n" "node-reinstall" "0.12" "specify a default node version - currently ${NODE_VERSION}" | |
printf "\n" | |
} | |
## parse opts | |
{ | |
for opt in ${@}; do | |
case $opt in | |
--help|-h) | |
usage | |
exit | |
;; | |
--version|-v) | |
echo ${VERSION} | |
exit | |
;; | |
--force|-f) | |
FORCE=1 | |
;; | |
--nave) | |
USE_NAVE=1 | |
USE_NVM=0 | |
;; | |
--nvm) | |
USE_NVM=1 | |
USE_NAVE=0 | |
;; | |
--nvm-latest) | |
USE_NVM=1 | |
USE_NAVE=0 | |
STABLE=master | |
;; | |
*) | |
if [ "-" == "${opt:0:1}" ]; then | |
echo >&2 "error: Unknown option \`$opt'" | |
usage >&2 | |
exit 1 | |
fi | |
NODE_VERSION="${opt}" | |
esac | |
done | |
} | |
# get sudo | |
sudo -v | |
# check to see if npm is installed | |
IS_NPM_MISSING=$(which npm) | |
if [[ -z $IS_NPM_MISSING ]]; then | |
echo "Installing Node, npm." | |
else | |
echo "Completely reinstalling Node, npm." | |
# get list of global npm modules to reinstall | |
# omit the lib directory listing | |
GLOBAL_MODULES=`npm -g list --depth 0 --parseable | xargs basename | sed -E 's/^(lib|npm)$//g'` | |
if [[ -n $GLOBAL_MODULES ]]; then | |
echo "Will reinstall these global npm modules:" | |
echo $GLOBAL_MODULES | |
else | |
echo "===== ALERT! =====" | |
echo "The script did not find any global node modules (npm -g list)" | |
echo "If you are sure you installed global node modules" | |
echo "(by running npm install -g some-module), you might want to stop " | |
echo "here and locate those, because they won't be re-installed," | |
echo "and since we'll be deleting all the possible install paths " | |
echo "that most people could use, you probably won't find them." | |
echo "" | |
echo "This can sometimes happen if you've installed global node modules" | |
echo "under a different node environment (for example, using nvm or nave)." | |
echo "It might help to run: " | |
echo "history | grep 'npm install' and look for either -g or --global" | |
echo "" | |
echo "If you aren't really sure, or you are sure and don't care, " | |
echo "you can continue; we'll re-install things the proper way, and" | |
echo "the next time you run this script you'll see a list of " | |
echo "any global node modules you've installed since now." | |
fi | |
if [[ $FORCE == 0 ]]; then | |
echo "" | |
echo "Would you like to continue running node-reinstall?" | |
echo "" | |
select yn in "Yes" "No"; do | |
case $yn in | |
Yes ) break;; | |
No ) exit;; | |
esac | |
done | |
fi | |
fi | |
if (( $USE_NVM )); then | |
# NVM will think it is still installed if NVM_DIR is still set | |
unset NVM_DIR | |
sudo rm -rf $HOME/.nvm | |
elif (( $USE_NAVE )); then | |
sudo rm -rf $HOME/.nave | |
else | |
echo >&2 "error: Unsupported version control system" | |
exit 1 | |
fi | |
# erase all possible install paths | |
sudo rm -rf $HOME/{local,lib,include,node*,npm,.npm*} | |
sudo rm -rf $PREFIX/lib/node* | |
sudo rm -rf $PREFIX/include/node* | |
sudo rm -rf $PREFIX/bin/{node,npm} | |
sudo rm -rf $PREFIX/share/man/man1/node.1 | |
sudo rm -rf $PREFIX/lib/dtrace/node.d | |
if (( $USE_NVM )); then | |
# go home and install NVM just because I feel safe there | |
cd $HOME | |
# get the latest stable version number of nvm from the repo's homepage | |
[ "$STABLE" == "" ] && STABLE=$(curl -s -k https://github.com/creationix/nvm/ | grep "curl https://raw.githubusercontent.com/creationix/nvm/" | grep -oE "v\d+\.\d+\.\d+") | |
[[ $STABLE =~ ^v[0-9]+.[0-9]+.[0-9]+$ ]] || STABLE="v0.25.1" | |
curl -sL https://raw.githubusercontent.com/creationix/nvm/$STABLE/install.sh | bash | |
source $HOME/.nvm/nvm.sh | |
elif (( $USE_NAVE )); then | |
curl -sL https://raw.githubusercontent.com/isaacs/nave/master/nave.sh -o $PREFIX/bin/nave | |
fi | |
if (( $USE_NVM )); then | |
# install the latest 0.10 version of node then set it as the default | |
nvm install $NODE_VERSION | |
nvm alias default $NODE_VERSION | |
elif (( $USE_NAVE )); then | |
nave usemain $NODE_VERSION | |
fi | |
if [[ ! -z ${GLOBAL_MODULES// } ]]; then | |
echo "Reinstalling your global npm modules:" | |
echo $GLOBAL_MODULES | |
if [[ $FORCE == 0 ]]; then | |
echo "Continue?" | |
select yn in "Yes" "No"; do | |
case $yn in | |
Yes ) npm install --global $GLOBAL_MODULES; break;; | |
No ) exit;; | |
esac | |
done | |
else | |
npm install --global $GLOBAL_MODULES | |
fi | |
fi | |
if [[ $OSTYPE =~ "darwin" ]]; then | |
echo "node-reinstall is done. 👍" | |
else | |
echo "node-reinstall is done." | |
fi | |
echo "You must restart your terminal for changes to take effect." |
I'm getting the same error than @tjfwalker
/Users/pier/Desktop/nodereinstall.sh: line 47: nvm: command not found
/Users/pier/Desktop/nodereinstall.sh: line 48: nvm: command not found
Reinstalling your global npm modules:
/Users/pier/Desktop/nodereinstall.sh: line 53: npm: command not found
@tjfwalker and @PierBover that is probably happening because this script, by default, was only sourcing the profile for ZSH (not Bash). I've since make this into a proper repo, and have made updates that check if you are using Bash or ZSH. Check it out here: https://github.com/brock/node-reinstall
Beautiful.
Thank you very much for this. I changed nvm install to stable :)
Thanks a lot!! This saved my whole day. You deserve a Medal Of Honour for this!
🍺
Thank you! This is a lifesaver. I changed the NODE_VERSION to 5.10
Thank you so much. I was in a downward spiral of installing/uninstalling and your script pulled me out!
Thank you. It really helped a lot. Very good idea.
Awesome. upgraded to 7.0 with this and everything appears to be working fine.
You sir are the bomb! thank you for saving me from so much pain :)
🍺
Amazing! Thanks so much!
Sir, you deserve a diamond medal of honour. Thanks forever!
I wish I could buy you a Beer. Thanks a lot.
It didn't work for me. Not sure what went wrong honestly, but following this manual instructions worked: https://stackoverflow.com/questions/11177954/how-do-i-completely-uninstall-node-js-and-reinstall-from-beginning-mac-os-x
You save my mind! Thanks
Thank you, amazing!
This script is awesome!
Could you please update it to most up-to-date node version? or maybe with a line asking for desired version?
Thanks!
@Moondancer83 See the repo for some of those updates: https://github.com/brock/node-reinstall
This script definitely is battle-tested!
Thanks! It saved my day.
PS: I use Linux Mint Tessa.
This didn't install it for macOS zsh
(which is default now)
This is awesome. I had almost given up. Thanks!
gif had meh lolz
Incredible work. Thank you!
You're a legend. I ran into an issue with AWS SAM, and this was the solution that fixed it.
@david-rodriguez I've not updated this in a long time, so it is still using a default Node.js version from 2014. Be sure to install a newer version of node before you get started! Something like nvm install 16
@brock I tweaked the script before running it to install the latest version of node. Nonetheless, you did most of the heavy lifting.
Working perfectly on 1 Aug'23. Thanks a ton.
@brock I got these error:
Any thoughts?