mirror of
https://github.com/nvm-sh/nvm.git
synced 2025-12-11 15:44:19 +00:00
Compare commits
47 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
83520186d8 | ||
|
|
37ffd82af4 | ||
|
|
2d4c9b0846 | ||
|
|
f50e7b1d05 | ||
|
|
66a9f01a0e | ||
|
|
f668d354a9 | ||
|
|
d13d6b199a | ||
|
|
cd3304548f | ||
|
|
45b89ab396 | ||
|
|
57d62762e1 | ||
|
|
8ec6fb22fd | ||
|
|
3d0082fa60 | ||
|
|
85566c9682 | ||
|
|
c060a287d0 | ||
|
|
590b283e65 | ||
|
|
a7328b3711 | ||
|
|
861766372d | ||
|
|
f10ac8e8c3 | ||
|
|
a77c632e2a | ||
|
|
0f6680e8b7 | ||
|
|
b2c6be9e08 | ||
|
|
8e0406e95b | ||
|
|
d3b5853454 | ||
|
|
077a661696 | ||
|
|
b69a2b7fc3 | ||
|
|
924d965964 | ||
|
|
926ea1d8e9 | ||
|
|
4fb13d113e | ||
|
|
dd32e5880d | ||
|
|
9ef89f51c9 | ||
|
|
b82bcfbd47 | ||
|
|
a078d6427b | ||
|
|
91d2be5179 | ||
|
|
c657328c8d | ||
|
|
641cbb634d | ||
|
|
d143b5f491 | ||
|
|
e0bbea635f | ||
|
|
fefa00fac8 | ||
|
|
359a83e6c5 | ||
|
|
06e882b332 | ||
|
|
b542e3e205 | ||
|
|
1938f6931c | ||
|
|
7df245c569 | ||
|
|
2527ff6b1f | ||
|
|
d67c7011f4 | ||
|
|
09e7c3227b | ||
|
|
93e28c3b2f |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,3 +1,4 @@
|
||||
HEAD
|
||||
src
|
||||
v*
|
||||
alias
|
||||
|
||||
3
.npmignore
Normal file
3
.npmignore
Normal file
@@ -0,0 +1,3 @@
|
||||
src
|
||||
v*
|
||||
alias
|
||||
@@ -2,44 +2,40 @@
|
||||
|
||||
## Installation
|
||||
|
||||
First you'll need to make sure your system has a c++ compiler. For OSX, XCode will work, for Ubuntu, the build-essential package works. You'll also need `git` if you want to track HEAD.
|
||||
First you'll need to make sure your system has a c++ compiler. For OSX, XCode will work, for Ubuntu, the build-essential and libssl-dev packages work.
|
||||
|
||||
To install create a folder somewhere in your filesystem with the "`nvm.sh`" file inside it. I put mine in a folder called "`.nvm`".
|
||||
|
||||
Or if you have `git` installed, then just clone it:
|
||||
|
||||
git clone git://gist.github.com/367305.git ~/.nvm
|
||||
git clone git://github.com/creationix/nvm.git ~/.nvm
|
||||
|
||||
Then add three lines to your bash profile:
|
||||
To activate nvm, you need to source it from your bash shell
|
||||
|
||||
NVM_DIR=$HOME/.nvm
|
||||
. $NVM_DIR/nvm.sh
|
||||
nvm use v0.1.91
|
||||
|
||||
The first line tells your system where NVM is installed, you should already have nvm.sh there. The second line loads the nvm function into your bash shell so that it's available as a command. The third line sets your default node version.
|
||||
. ~/.nvm/nvm.sh
|
||||
|
||||
I always add this line to my ~/.bashrc or ~/.profile file to have it automatically sources upon login.
|
||||
Often I also put in a line to use a specific version of node.
|
||||
|
||||
## Usage
|
||||
|
||||
To download, install, and use the v0.1.91 release of node do this:
|
||||
To download, compile, and install the v0.4.1 release of node, do this:
|
||||
|
||||
nvm install v0.1.91
|
||||
nvm install v0.4.1
|
||||
|
||||
And then in any new shell just use the installed version:
|
||||
|
||||
nvm use v0.1.91
|
||||
nvm use v0.4.1
|
||||
|
||||
If you want to track HEAD then use the clone command:
|
||||
If you want to see what versions are available:
|
||||
|
||||
nvm clone
|
||||
nvm ls
|
||||
|
||||
Then in any new shell you can get this version with:
|
||||
To restore your PATH, you can deactivate it.
|
||||
|
||||
nvm use HEAD
|
||||
nvm deactivate
|
||||
|
||||
When you want to grab the latest from the node repo do:
|
||||
To set a default Node version to be used in any new shell, use the alias 'default':
|
||||
|
||||
nvm update
|
||||
nvm alias default v0.4.1
|
||||
|
||||
If you want to see what versions you have installed issue:
|
||||
|
||||
nvm list
|
||||
22
install.sh
Executable file
22
install.sh
Executable file
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
|
||||
dir=$npm_config_root/.npm/$npm_package_name/$npm_package_version/package
|
||||
|
||||
# add lines to the bashrc.
|
||||
has=$(cat ~/.bashrc | egrep "^# ADDED BY npm FOR NVM$" || true)
|
||||
if [ "x$has" != "x" ]; then
|
||||
exit 0
|
||||
fi
|
||||
cat <<NVM_CODE >>~/.bashrc
|
||||
# ADDED BY npm FOR NVM
|
||||
. $dir/nvm.sh
|
||||
# END ADDED BY npm FOR NVM
|
||||
NVM_CODE
|
||||
|
||||
cat <<NVM_HOWTO
|
||||
|
||||
To use nvm, source your .bashrc file like this:
|
||||
. ~/.bashrc
|
||||
or log out and back into your terminal.
|
||||
|
||||
NVM_HOWTO
|
||||
264
nvm.sh
264
nvm.sh
@@ -5,9 +5,71 @@
|
||||
# Implemented by Tim Caswell <tim@creationix.com>
|
||||
# with much bash help from Matthew Ranney
|
||||
|
||||
# Auto detect the NVM_DIR
|
||||
if [ ! -d "$NVM_DIR" ]; then
|
||||
export NVM_DIR=$(cd $(dirname ${BASH_SOURCE[0]:-$0}); pwd)
|
||||
fi
|
||||
|
||||
# Emulate curl with wget, if necessary
|
||||
if [ ! `which curl` ]; then
|
||||
if [ `which wget` ]; then
|
||||
curl() {
|
||||
ARGS="$* "
|
||||
ARGS=${ARGS/-s /-q }
|
||||
ARGS=${ARGS/-\# /}
|
||||
ARGS=${ARGS/-C - /-c }
|
||||
ARGS=${ARGS/-o /-O }
|
||||
|
||||
wget $ARGS
|
||||
}
|
||||
else
|
||||
NOCURL='nocurl'
|
||||
curl() { echo 'Need curl or wget to proceed.' >&2; }
|
||||
fi
|
||||
fi
|
||||
|
||||
# Expand a version using the version cache
|
||||
nvm_version()
|
||||
{
|
||||
PATTERN=$1
|
||||
VERSION=''
|
||||
if [ -f "$NVM_DIR/alias/$PATTERN" ]; then
|
||||
nvm_version `cat $NVM_DIR/alias/$PATTERN`
|
||||
return
|
||||
fi
|
||||
# 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"
|
||||
return 13
|
||||
elif [ -e "$NVM_DIR/$VERSION" ]; then
|
||||
(cd $NVM_DIR; ls -dG "$VERSION")
|
||||
else
|
||||
echo "$VERSION"
|
||||
fi
|
||||
}
|
||||
|
||||
nvm()
|
||||
{
|
||||
START=`pwd`
|
||||
if [ $# -lt 1 ]; then
|
||||
nvm help
|
||||
return
|
||||
@@ -18,100 +80,162 @@ nvm()
|
||||
echo "Node Version Manager"
|
||||
echo
|
||||
echo "Usage:"
|
||||
echo " nvm help (Show this message)"
|
||||
echo " nvm install version (Download and install a released version)"
|
||||
echo " nvm clone (Clone and install HEAD version)"
|
||||
echo " nvm update (Pull and rebuild HEAD version)"
|
||||
echo " nvm list (Show all installed versions)"
|
||||
echo " nvm use version (Set this version in the PATH)"
|
||||
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"
|
||||
echo " nvm deactivate Undo effects of NVM on current shell"
|
||||
echo " nvm sync Update the local cache of available versions"
|
||||
echo " nvm alias [<pattern>] Show all aliases beginning with <pattern>"
|
||||
echo " nvm alias <name> <version> Set an alias named <name> pointing to <version>"
|
||||
echo
|
||||
echo "Example:"
|
||||
echo " nvm install v0.1.91"
|
||||
echo " nvm install v0.4.0 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.2 Use the latest available 0.2.x release"
|
||||
echo " nvm alias default v0.4.0 Set v0.4.0 as the default"
|
||||
echo
|
||||
;;
|
||||
"clone" )
|
||||
if [ $# -ne 1 ]; then
|
||||
nvm help
|
||||
return;
|
||||
fi
|
||||
mkdir -p "$NVM_DIR/src" && \
|
||||
cd "$NVM_DIR/src" && \
|
||||
git clone git://github.com/ry/node.git && \
|
||||
cd node && \
|
||||
./configure --debug --prefix="$NVM_DIR/HEAD" && \
|
||||
make && \
|
||||
make install && \
|
||||
nvm use HEAD
|
||||
cd $START
|
||||
;;
|
||||
"update" )
|
||||
if [ $# -ne 1 ]; then
|
||||
nvm help
|
||||
return;
|
||||
fi
|
||||
cd "$NVM_DIR/src/node" && \
|
||||
git pull origin master && \
|
||||
./configure --debug --prefix="$NVM_DIR/HEAD" && \
|
||||
make clean all && \
|
||||
make install && \
|
||||
nvm use HEAD
|
||||
cd $START
|
||||
;;
|
||||
"install" )
|
||||
if [ $# -ne 2 ]; then
|
||||
nvm help
|
||||
return;
|
||||
return
|
||||
fi
|
||||
[ "$NOCURL" ] && curl && return
|
||||
VERSION=`nvm_version $2`
|
||||
if (
|
||||
mkdir -p "$NVM_DIR/src" && \
|
||||
cd "$NVM_DIR/src" && \
|
||||
curl -C - -# "http://nodejs.org/dist/node-$VERSION.tar.gz" -o "node-$VERSION.tar.gz" && \
|
||||
tar -xzf "node-$VERSION.tar.gz" && \
|
||||
cd "node-$VERSION" && \
|
||||
./configure --prefix="$NVM_DIR/$VERSION" && \
|
||||
make && \
|
||||
rm -f "$NVM_DIR/$VERSION" 2>/dev/null && \
|
||||
make install
|
||||
)
|
||||
then
|
||||
nvm use $VERSION
|
||||
if ! which npm ; then
|
||||
echo "Installing npm..."
|
||||
curl http://npmjs.org/install.sh | sh
|
||||
fi
|
||||
else
|
||||
echo "nvm: install $VERSION failed!"
|
||||
fi
|
||||
;;
|
||||
"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
|
||||
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
|
||||
mkdir -p "$NVM_DIR/src" && \
|
||||
cd "$NVM_DIR/src" && \
|
||||
wget "http://nodejs.org/dist/node-$2.tar.gz" -N && \
|
||||
tar -xzf "node-$2.tar.gz" && \
|
||||
cd "node-$2" && \
|
||||
./configure --prefix="$NVM_DIR/$2" && \
|
||||
make && \
|
||||
make install && \
|
||||
nvm use $2
|
||||
cd $START
|
||||
;;
|
||||
"use" )
|
||||
if [ $# -ne 2 ]; then
|
||||
nvm help
|
||||
return;
|
||||
return
|
||||
fi
|
||||
if [ ! -d $NVM_DIR/$2 ]; then
|
||||
echo "$2 version is not installed yet"
|
||||
VERSION=`nvm_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/$2/bin${PATH#*$NVM_DIR/*/bin}
|
||||
PATH=${PATH%$NVM_DIR/*/bin*}$NVM_DIR/$VERSION/bin${PATH#*$NVM_DIR/*/bin}
|
||||
else
|
||||
PATH="$NVM_DIR/$2/bin:$PATH"
|
||||
PATH="$NVM_DIR/$VERSION/bin:$PATH"
|
||||
fi
|
||||
if [[ $MANPATH == *$NVM_DIR/*/share/man* ]]; then
|
||||
MANPATH=${MANPATH%$NVM_DIR/*/share/man*}$NVM_DIR/$VERSION/share/man${MANPATH#*$NVM_DIR/*/share/man}
|
||||
else
|
||||
MANPATH="$NVM_DIR/$VERSION/share/man:$MANPATH"
|
||||
fi
|
||||
export PATH
|
||||
echo "Now using node $2"
|
||||
export MANPATH
|
||||
export NVM_PATH="$NVM_DIR/$VERSION/lib/node"
|
||||
export NVM_BIN="$NVM_DIR/$VERSION/bin"
|
||||
echo "Now using node $VERSION"
|
||||
;;
|
||||
"list" )
|
||||
"ls" )
|
||||
if [ $# -ne 1 ]; then
|
||||
nvm help
|
||||
return;
|
||||
nvm_version $2
|
||||
return
|
||||
fi
|
||||
if [ -d $NVM_DIR/HEAD ]; then
|
||||
if [[ $PATH == *$NVM_DIR/HEAD/bin* ]]; then
|
||||
echo "HEAD *"
|
||||
else
|
||||
echo "HEAD"
|
||||
fi
|
||||
fi
|
||||
for f in $NVM_DIR/v*; do
|
||||
if [[ $PATH == *$f/bin* ]]; then
|
||||
echo "v${f##*v} *"
|
||||
else
|
||||
echo "v${f##*v}"
|
||||
fi
|
||||
nvm_version all
|
||||
for P in {stable,latest,current}; do
|
||||
echo -ne "$P: \t"; nvm_version $P
|
||||
done
|
||||
nvm alias
|
||||
echo "# use 'nvm sync' to update from nodejs.org"
|
||||
;;
|
||||
"alias" )
|
||||
mkdir -p $NVM_DIR/alias
|
||||
if [ $# -le 2 ]; then
|
||||
(cd $NVM_DIR/alias && for ALIAS in `ls $2* 2>/dev/null`; do
|
||||
DEST=`cat $ALIAS`
|
||||
VERSION=`nvm_version $DEST`
|
||||
if [ "$DEST" = "$VERSION" ]; then
|
||||
echo "$ALIAS -> $DEST"
|
||||
else
|
||||
echo "$ALIAS -> $DEST (-> $VERSION)"
|
||||
fi
|
||||
done)
|
||||
return
|
||||
fi
|
||||
if [ ! "$3" ]; then
|
||||
rm -f $NVM_DIR/alias/$2
|
||||
echo "$2 -> *poof*"
|
||||
return
|
||||
fi
|
||||
mkdir -p $NVM_DIR/alias
|
||||
VERSION=`nvm_version $3`
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "! WARNING: Version '$3' does not exist." >&2
|
||||
fi
|
||||
echo $3 > "$NVM_DIR/alias/$2"
|
||||
if [ ! "$3" = "$VERSION" ]; then
|
||||
echo "$2 -> $3 (-> $VERSION)"
|
||||
echo "! WARNING: Moving target. Aliases to implicit versions may change without warning."
|
||||
else
|
||||
echo "$2 -> $3"
|
||||
fi
|
||||
;;
|
||||
"sync" )
|
||||
[ "$NOCURL" ] && curl && return
|
||||
LATEST=`nvm_version latest`
|
||||
STABLE=`nvm_version stable`
|
||||
(cd $NVM_DIR
|
||||
rm -f v* 2>/dev/null
|
||||
printf "# syncing with nodejs.org..."
|
||||
for VER in `curl -s http://nodejs.org/dist/ -o - | grep 'node-v.*\.tar\.gz' | sed -e 's/.*node-//' -e 's/\.tar\.gz.*//'`; do
|
||||
touch $VER
|
||||
done
|
||||
echo " done."
|
||||
)
|
||||
[ "$STABLE" = `nvm_version stable` ] || echo "NEW stable: `nvm_version stable`"
|
||||
[ "$LATEST" = `nvm_version latest` ] || echo "NEW latest: `nvm_version latest`"
|
||||
;;
|
||||
"clear-cache" )
|
||||
rm -f $NVM_DIR/v* 2>/dev/null
|
||||
echo "Cache cleared."
|
||||
;;
|
||||
"version" )
|
||||
nvm_version $2
|
||||
;;
|
||||
* )
|
||||
nvm help
|
||||
;;
|
||||
esac
|
||||
}
|
||||
}
|
||||
|
||||
nvm ls default >/dev/null 2>&1 && nvm use default >/dev/null
|
||||
|
||||
6
package.json
Normal file
6
package.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{ "name" : "nvm"
|
||||
, "version" : "0.1.0"
|
||||
, "author" : "Tim Caswell <tim@creationix.org>"
|
||||
, "scripts" :
|
||||
{ "install" : "./install.sh" , "uninstall" : "./uninstall.sh" }
|
||||
}
|
||||
23
uninstall.sh
Executable file
23
uninstall.sh
Executable file
@@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
has=$(cat ~/.bashrc | egrep "^# ADDED BY npm FOR NVM$" || true)
|
||||
if [ "x$has" == "x" ]; then
|
||||
echo "doesn't have it, exiting"
|
||||
exit 0
|
||||
fi
|
||||
tmp=~/.bashrc.tmp
|
||||
cat ~/.bashrc | {
|
||||
incode=0
|
||||
while read line; do
|
||||
if [ "$line" == "# ADDED BY npm FOR NVM" ]; then
|
||||
incode=1
|
||||
elif [ "$line" == "# END ADDED BY npm FOR NVM" ] \
|
||||
&& [ $incode -eq 1 ]; then
|
||||
incode=0
|
||||
elif [ $incode -eq 0 ]; then
|
||||
echo "$line" >> $tmp
|
||||
fi
|
||||
done
|
||||
}
|
||||
mv $tmp ~/.bashrc
|
||||
Reference in New Issue
Block a user