nvm/nvm.sh

169 lines
4.9 KiB
Bash
Raw Normal View History

2010-04-16 00:13:33 +08:00
# Node Version Manager
# Implemented as a bash function
# To use source this file from your bash profile
#
# Implemented by Tim Caswell <tim@creationix.com>
# with much bash help from Matthew Ranney
2010-12-11 03:32:16 +08:00
# Auto detect the NVM_DIR using magic bash 3.x stuff
export NVM_DIR=$(dirname ${BASH_ARGV[0]})
# Expand a version using the version cache
version()
{
PATTERN=$1
VERSION=''
# If it looks like an explicit version, don't do anything funny
if [[ $PATTERN == v*.*.* ]]; then
VERSION=$PATTERN
fi
# The default version is the current one
if [ ! $PATTERN -o $PATTERN = 'current' ]; then
VERSION=`node -v 2>/dev/null`
fi
if [ $PATTERN = 'stable' ]; then
PATTERN='*.*[02468].'
fi
if [ $PATTERN = 'latest' ]; then
PATTERN='*.*.'
fi
if [ $PATTERN = 'all' ]; then
(cd $NVM_DIR; ls -dG v* 2>/dev/null || echo "N/A")
return
fi
if [ ! "$VERSION" ]; then
VERSION=`(cd $NVM_DIR; ls -d v${PATTERN}* 2>/dev/null) | sort -t. -k 2,1n -k 2,2n -k 3,3n | tail -n1`
fi
if [ ! "$VERSION" ]; then
echo "N/A"
elif [ -e "$NVM_DIR/$VERSION" ]; then
(cd $NVM_DIR; ls -dG $VERSION)
else
echo "$VERSION"
fi
}
2010-04-16 00:13:33 +08:00
nvm()
{
2010-04-16 00:20:27 +08:00
if [ $# -lt 1 ]; then
nvm help
return
fi
case $1 in
"help" )
echo
echo "Node Version Manager"
2010-04-16 00:53:39 +08:00
echo
2010-04-16 00:20:27 +08:00
echo "Usage:"
2010-12-11 03:32:16 +08:00
echo " nvm help Show this message"
echo " nvm install <version> Download and install a <version>"
echo " nvm use <version> Modify PATH to use <version>"
echo " nvm ls List versions (installed versions are blue)"
echo " nvm ls <version> List versions matching a given description"
2010-12-11 03:32:16 +08:00
echo " nvm deactivate Undo effects of NVM on current shell"
echo " nvm sync Update the local cache of available versions"
2010-04-16 00:53:39 +08:00
echo
echo "Example:"
echo " nvm install v0.2.5 Install a specific version number"
echo " nvm use stable Use the stable release"
echo " nvm install latest Install the latest, possibly unstable version"
echo " nvm use 0.3 Use the latest available 0.3.x release"
2010-04-16 00:20:27 +08:00
echo
;;
"install" )
2010-04-16 00:53:39 +08:00
if [ $# -ne 2 ]; then
2010-04-16 00:20:27 +08:00
nvm help
return;
fi
VERSION=`version $2`
START=`pwd`
2010-04-16 00:20:27 +08:00
mkdir -p "$NVM_DIR/src" && \
rm -f "$NVM_DIR/$2" && \
2010-04-16 00:20:27 +08:00
cd "$NVM_DIR/src" && \
wget "http://nodejs.org/dist/node-$VERSION.tar.gz" -N && \
tar -xzf "node-$VERSION.tar.gz" && \
cd "node-$VERSION" && \
./configure --prefix="$NVM_DIR/$VERSION" && \
2010-04-16 00:20:27 +08:00
make && \
make install && \
nvm use $VERSION
if ! which npm ; then
echo "Installing npm..."
curl http://npmjs.org/install.sh | sh
fi
2010-04-16 00:20:27 +08:00
cd $START
;;
"deactivate" )
if [[ $PATH == *$NVM_DIR/*/bin* ]]; then
export PATH=${PATH%$NVM_DIR/*/bin*}${PATH#*$NVM_DIR/*/bin:}
echo "$NVM_DIR/*/bin removed from \$PATH"
else
echo "Could not find $NVM_DIR/*/bin in \$PATH"
fi
2010-12-12 12:19:23 +08:00
if [[ $MANPATH == *$NVM_DIR/*/share/man* ]]; then
export MANPATH=${MANPATH%$NVM_DIR/*/share/man*}${MANPATH#*$NVM_DIR/*/share/man:}
echo "$NVM_DIR/*/share/man removed from \$MANPATH"
else
echo "Could not find $NVM_DIR/*/share/man in \$MANPATH"
fi
;;
2010-04-16 00:20:27 +08:00
"use" )
2010-04-16 00:53:39 +08:00
if [ $# -ne 2 ]; then
2010-12-11 03:32:16 +08:00
nvm help
return
2010-04-16 00:20:27 +08:00
fi
VERSION=`version $2`
if [ ! -d $NVM_DIR/$VERSION ]; then
echo "$VERSION version is not installed yet"
return;
fi
if [[ $PATH == *$NVM_DIR/*/bin* ]]; then
PATH=${PATH%$NVM_DIR/*/bin*}$NVM_DIR/$VERSION/bin${PATH#*$NVM_DIR/*/bin}
else
PATH="$NVM_DIR/$VERSION/bin:$PATH"
fi
2010-12-12 12:19:23 +08:00
if [[ $MANPATH == *$NVM_DIR/*/share/man* ]]; then
MANPATH=${MANPATH%$NVM_DIR/*/share/man*}$NVM_DIR/$VERSION/share/man${MANPATH#*$NVM_DIR/*/share/man}
2010-12-12 12:19:23 +08:00
else
MANPATH="$NVM_DIR/$VERSION/share/man:$MANPATH"
2010-12-12 12:19:23 +08:00
fi
export PATH
2010-12-12 12:19:23 +08:00
export MANPATH
export NVM_PATH="$NVM_DIR/$VERSION/lib/node"
export NVM_BIN="$NVM_DIR/$VERSION/bin"
echo "Now using node $VERSION"
2010-04-16 00:20:27 +08:00
;;
2010-12-11 03:32:16 +08:00
"ls" )
2010-04-16 00:53:39 +08:00
if [ $# -ne 1 ]; then
version $2
2010-04-16 00:53:39 +08:00
return;
fi
version all
for P in {stable,latest,current}; do
echo -ne "$P: \t"; version $P
done
echo "# use 'nvm sync' to update from nodejs.org"
;;
"sync" )
(cd $NVM_DIR
rm -f v* 2>/dev/null
echo -n "Syncing with nodejs.org..."
for VER in `curl -s http://nodejs.org/dist/ | grep 'node-v.*\.tar\.gz' | sed -e 's/.*node-//' -e 's/\.tar\.gz.*//'`
do touch $VER
done
echo " done."
)
;;
"clear-cache" )
rm -f $NVM_DIR/v*
echo "Cache cleared."
;;
"version" )
version $2
2010-04-16 00:20:27 +08:00
;;
* )
nvm help
;;
esac
2010-12-11 03:32:16 +08:00
}