Created
July 8, 2015 19:35
-
-
Save l3x/c9c8d935fdefca481c92 to your computer and use it in GitHub Desktop.
Cleanly Install NVM, NODE and NPM on OSX
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# filename: install-nvm-npm-node | |
# author: Lex Sheehan | |
# purpose: To cleanly install NVM, NODE and NPM | |
# dependencies: brew | |
# see: http://lexsheehan.blogspot.com/2015/04/cleanly-install-nvm-node-and-npm.html | |
NOW=$(date +%x\ %H:%M:%S) | |
CR=$'\n' | |
REV=$(tput rev) | |
OFF=$(tput sgr0) | |
BACKUP_DIR=$HOME/backups/nvm-npm-bower-caches/$NOW | |
MY_NAME=$(basename $0) | |
NODE_VER_TO_INSTALL=$1 | |
if [ "$NODE_VER_TO_INSTALL" == "" ]; then | |
NODE_VER_TO_INSTALL=v0.12.2 | |
fi | |
if [ "`echo "$NODE_VER_TO_INSTALL" | cut -c1-1`" != "v" ]; then | |
echo """$CR""Usage: $ $MY_NAME " | |
echo "Example: $ $MY_NAME v0.12.1" | |
echo "Example: $ $MY_NAME $CR" | |
exit 1 | |
fi | |
echo """$CR""First, run: $ brew update" | |
echo "Likely, you'll need to do what it suggests." | |
echo "Likely, you'll need to run: $ brew update$CR" | |
echo "To install latest node version, run the following command to get the latest version: $ nvm ls-remote" | |
echo "... and pass the version number you want as the only param to $MY_NAME. $CR" | |
echo "Are you ready to install the latest version of nvm and npm and node version $NODE_VER_TO_INSTALL ?$CR" | |
echo "Press CTL+C to exit --or-- Enter to continue..." | |
read x | |
echo """$REV""Uninstalling nvm...$CR$OFF" | |
# Making backups, but in all likelyhood you'll just reinstall them (and won't need these backups) | |
if [ ! -d "$BACKUP_DIR" ]; then | |
echo "Creating directory to store $HOME/.nvm .npm and .bower cache backups: $BACKUP_DIR" | |
mkdir -p $BACKUP_DIR | |
fi | |
set -x | |
mv $HOME/.nvm $BACKUP_DIR 2>/dev/null | |
mv $HOME/.npm $BACKUP_DIR 2>/dev/null | |
mv $HOME/.bower $BACKUP_DIR 2>/dev/null | |
{ set +x; } &>/dev/null | |
echo "$REV""$CR""Uninstalling node...$CR$OFF" | |
echo "Enter your password to remove user some node-related /usr/local directories" | |
set -x | |
sudo rm -rf /usr/local/lib/node_modules | |
rm -rf /usr/local/lib/node | |
rm -rf /usr/local/include/node | |
rm -rf /usr/local/include/node_modules | |
rm /usr/local/bin/npm | |
rm /usr/local/lib/dtrace/node.d | |
rm -rf $HOME/.node | |
rm -rf $HOME/.node-gyp | |
rm /opt/local/bin/node | |
rm /opt/local/include/node | |
rm -rf /opt/local/lib/node_modules | |
rm -rf /usr/local/Cellar/nvm | |
brew uninstall node 2>/dev/null | |
{ set +x; } &>/dev/null | |
echo "$REV""$CR""Installing nvm...$CR$OFF" | |
echo "++brew install nvm" | |
brew install nvm | |
echo '$(brew --prefix nvm)/nvm.sh' | |
source $(brew --prefix nvm)/nvm.sh | |
echo "$REV""$CR""Insert the following line in your startup script (ex: $HOME/.bashrc):$CR$OFF" | |
echo "export NVM_DIR=\"\$(brew --prefix nvm)\"; [ -s \"\$NVM_DIR/nvm.sh\" ] && . \"\$NVM_DIR/nvm.sh\"$CR" | |
NVM_DIR="$(brew --prefix nvm)" | |
echo """$CR""Using nvm install node...$CR" | |
echo "++ nvm install $NODE_VER_TO_INSTALL" | |
nvm install $NODE_VER_TO_INSTALL | |
NODE_BINARY_PATH="`find /usr/local/Cellar/nvm -name node -type d|head -n 1`/$NODE_VER_TO_INSTALL/bin" | |
echo "$REV""$CR""Insert the following line in your startup script (ex: $HOME/.bashrc) and then restart your shell:$CR$OFF" | |
echo "export PATH=\$PATH:$NODE_BINARY_PATH:$HOME/.node/bin" | |
echo """$CR""Upgrading npm...$CR" | |
echo '++ install -g npm@latest' | |
npm install -g npm@latest | |
{ set +x; } &>/dev/null | |
echo "$REV""$CR""Insert following line in your $HOME/.npmrc file:$OFF" | |
echo """$CR""prefix=$HOME/.node$CR" | |
echo "Now, all is likley well if you can run the following without errors: npm install -g grunt-cli$CR" | |
echo "Other recommended global installs: bower, gulp, yo, node-inspector$CR" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment