Skip to content

Instantly share code, notes, and snippets.

@brock
Last active August 31, 2023 14:22
Star You must be signed in to star a gist
Embed
What would you like to do?
Complete Node Reinstall. I've moved this to a repo at http://git.io/node-reinstall
#!/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."
@tjfwalker
Copy link

@brock I got these error:

=> Appending source string to /Users/TJ/.bashrc
=> Close and reopen your terminal to start using nvm
/Users/TJ/.oh-my-zsh/oh-my-zsh.sh: line 26: syntax error near unexpected token `('
/Users/TJ/.oh-my-zsh/oh-my-zsh.sh: line 26: `for config_file ($ZSH/lib/*.zsh); do'
/Users/TJ/Desktop/nodereinstall.sh: line 48: nvm: command not found
/Users/TJ/Desktop/nodereinstall.sh: line 49: nvm: command not found
Reinstalling your global npm modules:
git-it grunt-cli keybase keybase-installer learnyounode roots sails stylus
/Users/TJ/Desktop/nodereinstall.sh: line 54: npm: command not found

Any thoughts?

@PierBover
Copy link

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

@brock
Copy link
Author

brock commented Mar 9, 2015

@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

@bumble-bee-chuna
Copy link

Beautiful.

@ayofish
Copy link

ayofish commented Aug 21, 2015

Thank you very much for this. I changed nvm install to stable :)

@vaibhavthapliyal
Copy link

Thanks a lot!! This saved my whole day. You deserve a Medal Of Honour for this!

@alexmgrant
Copy link

🍺

@trodicaro
Copy link

Thank you! This is a lifesaver. I changed the NODE_VERSION to 5.10

@JosCline
Copy link

JosCline commented Jun 3, 2016

Thank you so much. I was in a downward spiral of installing/uninstalling and your script pulled me out!

@ksobkowicz
Copy link

Thank you. It really helped a lot. Very good idea.

@joelpturman
Copy link

Awesome. upgraded to 7.0 with this and everything appears to be working fine.

@neil-coutinho
Copy link

You sir are the bomb! thank you for saving me from so much pain :)

@spedley
Copy link

spedley commented Jul 15, 2018

🍺

@Deacs
Copy link

Deacs commented Jul 19, 2018

Amazing! Thanks so much!

@emirbalic
Copy link

Sir, you deserve a diamond medal of honour. Thanks forever!

@NortonGun
Copy link

I wish I could buy you a Beer. Thanks a lot.

@lorepieri8
Copy link

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

@usanin
Copy link

usanin commented Aug 8, 2019

You save my mind! Thanks

@barelabs
Copy link

Thank you, amazing!

@Moondancer83
Copy link

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!

@brock
Copy link
Author

brock commented Jan 7, 2020

@Moondancer83 See the repo for some of those updates: https://github.com/brock/node-reinstall

@roshnet
Copy link

roshnet commented Jan 18, 2020

This script definitely is battle-tested!

Thanks! It saved my day.

PS: I use Linux Mint Tessa.

@michaeljakob
Copy link

This didn't install it for macOS zsh (which is default now)

@ankitbhadana
Copy link

This is awesome. I had almost given up. Thanks!

@eli9000
Copy link

eli9000 commented Nov 19, 2021

gif had meh lolz

@nonlocalize
Copy link

Incredible work. Thank you!

@david-rodriguez
Copy link

You're a legend. I ran into an issue with AWS SAM, and this was the solution that fixed it.

@brock
Copy link
Author

brock commented Nov 21, 2022

@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

@david-rodriguez
Copy link

@brock I tweaked the script before running it to install the latest version of node. Nonetheless, you did most of the heavy lifting.

@alok-mani-ds
Copy link

Working perfectly on 1 Aug'23. Thanks a ton.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment