mirror of
				https://github.com/nvm-sh/nvm.git
				synced 2025-10-31 18:25:52 +08:00 
			
		
		
		
	Merge curl/wget and version changes
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,3 +1,4 @@ | |||||||
| HEAD | HEAD | ||||||
| src | src | ||||||
| v* | v* | ||||||
|  | alias | ||||||
|   | |||||||
| @@ -1,2 +1,3 @@ | |||||||
| src | src | ||||||
| v* | v* | ||||||
|  | alias | ||||||
|   | |||||||
| @@ -27,7 +27,7 @@ And then in any new shell just use the installed version: | |||||||
|  |  | ||||||
|     nvm use v0.2.5 |     nvm use v0.2.5 | ||||||
|  |  | ||||||
| If you want to see what versions you have installed issue: | If you want to see what versions are available: | ||||||
|  |  | ||||||
|     nvm ls |     nvm ls | ||||||
|  |  | ||||||
| @@ -35,3 +35,7 @@ To restore your PATH, you can deactivate it. | |||||||
|  |  | ||||||
|     nvm deactivate |     nvm deactivate | ||||||
|  |  | ||||||
|  | To set a default Node version to be used in any new shell, use the alias 'default': | ||||||
|  |  | ||||||
|  |     nvm alias default v0.2.5 | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										154
									
								
								nvm.sh
									
									
									
									
									
								
							
							
						
						
									
										154
									
								
								nvm.sh
									
									
									
									
									
								
							| @@ -26,6 +26,46 @@ if [ ! `which curl` ]; then | |||||||
|     fi |     fi | ||||||
| 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 -1 | ||||||
|  |     elif [ -e "$NVM_DIR/$VERSION" ]; then | ||||||
|  |         (cd $NVM_DIR; ls -dG "$VERSION") | ||||||
|  |     else | ||||||
|  |         echo "$VERSION" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
| nvm() | nvm() | ||||||
| { | { | ||||||
|   if [ $# -lt 1 ]; then |   if [ $# -lt 1 ]; then | ||||||
| @@ -41,12 +81,19 @@ nvm() | |||||||
|       echo "    nvm help                    Show this message" |       echo "    nvm help                    Show this message" | ||||||
|       echo "    nvm install <version>       Download and install a <version>" |       echo "    nvm install <version>       Download and install a <version>" | ||||||
|       echo "    nvm use <version>           Modify PATH to use <version>" |       echo "    nvm use <version>           Modify PATH to use <version>" | ||||||
|       echo "    nvm ls                  List versions currently installed" |       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 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 | ||||||
|       echo "Example:" |       echo "Example:" | ||||||
|       echo "    nvm install v0.2.5" |       echo "    nvm install v0.2.5          Install a specific version number" | ||||||
|       echo "    nvm use v0.2.5" |       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" | ||||||
|  |       echo "    nvm alias default v0.3.6    Set v0.3.6 as the default"  | ||||||
|       echo |       echo | ||||||
|     ;; |     ;; | ||||||
|     "install" ) |     "install" ) | ||||||
| @@ -55,16 +102,18 @@ nvm() | |||||||
|         return; |         return; | ||||||
|       fi |       fi | ||||||
|       [ "$NOCURL" ] && curl && return |       [ "$NOCURL" ] && curl && return | ||||||
|  |       VERSION=`nvm_version $2` | ||||||
|       START=`pwd` |       START=`pwd` | ||||||
|       mkdir -p "$NVM_DIR/src" && \ |       mkdir -p "$NVM_DIR/src" && \ | ||||||
|       cd "$NVM_DIR/src" && \ |       cd "$NVM_DIR/src" && \ | ||||||
|       curl -C - -# "http://nodejs.org/dist/node-$2.tar.gz" -o "node-$2.tar.gz" && \ |       curl -C - -# "http://nodejs.org/dist/node-$VERSION.tar.gz" -o "node-$VERSION.tar.gz" && \ | ||||||
|       tar -xzf "node-$2.tar.gz" && \ |       tar -xzf "node-$VERSION.tar.gz" && \ | ||||||
|       cd "node-$2" && \ |       cd "node-$VERSION" && \ | ||||||
|       ./configure --prefix="$NVM_DIR/$2" && \ |       ./configure --prefix="$NVM_DIR/$VERSION" && \ | ||||||
|       make && \ |       make && \ | ||||||
|  |       rm -f "$NVM_DIR/$VERSION" && \ | ||||||
|       make install && \ |       make install && \ | ||||||
|       nvm use $2 |       nvm use $VERSION | ||||||
|       if ! which npm ; then |       if ! which npm ; then | ||||||
|         echo "Installing npm..." |         echo "Installing npm..." | ||||||
|         curl -# http://npmjs.org/install.sh -o - | sh |         curl -# http://npmjs.org/install.sh -o - | sh | ||||||
| @@ -90,41 +139,96 @@ nvm() | |||||||
|         nvm help |         nvm help | ||||||
|         return |         return | ||||||
|       fi |       fi | ||||||
|       if [ ! -d $NVM_DIR/$2 ]; then |       VERSION=`nvm_version $2` | ||||||
|         echo "$2 version is not installed yet" |       if [ ! -d $NVM_DIR/$VERSION ]; then | ||||||
|  |         echo "$VERSION version is not installed yet" | ||||||
|         return; |         return; | ||||||
|       fi |       fi | ||||||
|       if [[ $PATH == *$NVM_DIR/*/bin* ]]; then |       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 |       else | ||||||
|         PATH="$NVM_DIR/$2/bin:$PATH" |         PATH="$NVM_DIR/$VERSION/bin:$PATH" | ||||||
|       fi |       fi | ||||||
|       if [[ $MANPATH == *$NVM_DIR/*/share/man* ]]; then |       if [[ $MANPATH == *$NVM_DIR/*/share/man* ]]; then | ||||||
|         MANPATH=${MANPATH%$NVM_DIR/*/share/man*}$NVM_DIR/$2/share/man${MANPATH#*$NVM_DIR/*/share/man} |         MANPATH=${MANPATH%$NVM_DIR/*/share/man*}$NVM_DIR/$VERSION/share/man${MANPATH#*$NVM_DIR/*/share/man} | ||||||
|       else |       else | ||||||
|         MANPATH="$NVM_DIR/$2/share/man:$MANPATH" |         MANPATH="$NVM_DIR/$VERSION/share/man:$MANPATH" | ||||||
|       fi |       fi | ||||||
|       export PATH |       export PATH | ||||||
|       export MANPATH |       export MANPATH | ||||||
|       export NVM_PATH="$NVM_DIR/$2/lib/node" |       export NVM_PATH="$NVM_DIR/$VERSION/lib/node" | ||||||
|       export NVM_BIN="$NVM_DIR/$2/bin" |       export NVM_BIN="$NVM_DIR/$VERSION/bin" | ||||||
|       echo "Now using node $2" |       echo "Now using node $VERSION" | ||||||
|     ;; |     ;; | ||||||
|     "ls" ) |     "ls" ) | ||||||
|       if [ $# -ne 1 ]; then |       if [ $# -ne 1 ]; then | ||||||
|         nvm help |         nvm_version $2 | ||||||
|         return; |         return | ||||||
|       fi |  | ||||||
|       for f in $NVM_DIR/v*; do |  | ||||||
|         if [[ $PATH == *$f/bin* ]]; then |  | ||||||
|           echo "v${f##*v} *" |  | ||||||
|         else |  | ||||||
|           echo "v${f##*v}" |  | ||||||
|       fi |       fi | ||||||
|  |       nvm_version all | ||||||
|  |       for P in {stable,latest,current}; do | ||||||
|  |           echo -ne "$P: \t"; nvm_version $P | ||||||
|       done |       done | ||||||
|  |       nvm alias | ||||||
|  |       echo "# use 'nvm sync' to update from nodejs.org" | ||||||
|  |     ;; | ||||||
|  |     "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 | ||||||
|  |         echo -n "# 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* | ||||||
|  |         echo "Cache cleared." | ||||||
|  |     ;; | ||||||
|  |     "version" ) | ||||||
|  |         nvm_version $2 | ||||||
|     ;; |     ;; | ||||||
|     * ) |     * ) | ||||||
|       nvm help |       nvm help | ||||||
|     ;; |     ;; | ||||||
|   esac |   esac | ||||||
| } | } | ||||||
|  |  | ||||||
|  | nvm ls default >/dev/null 2>&1 && nvm use default >/dev/null | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user