-
Star
(236)
You must be signed in to star a gist -
Fork
(48)
You must be signed in to fork a gist
-
-
Save brock/5b1b70590e1171c4ab54 to your computer and use it in GitHub Desktop.
#!/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." |
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.
Two small suggestions:
/usr/local/share/doc/node
and/usrl/local/share/systemtap/tapset/node.stp
are not cleaned up.- update installation steps as shown on nvm-sh/nvm
@seguri Thanks for posting the feedback on this script.
Can you share more info on what installer uses each of these install paths? I don't like adding directory deletions without vetting them to some degree in case someone blindly runs my scripts.
/usr/local/share/doc/node
/usr/local/share/systemtap/tapset/node.stp
And what needs to be updated to the installation steps from nvm-sh/nvm? I'm not up to date on their changes since they move a lot more than I do.
I don't typically update this Gist, but I do make updates to the node-reinstall repo when major changes need to happen, and would be happy to bring it up to date if it makes sense.
Replying here is fine, but if you're familiar with git and Github and want to create a Pull Request with the proposed changes, I'd happily review it and add you to the contributors.
Beautiful.