mirror of
				https://github.com/nvm-sh/nvm.git
				synced 2025-10-31 10:15:53 +08:00 
			
		
		
		
	Show all available versions in ls
Adds a cache of all versions available on nodejs.org using simple empty files as placeholders. When a new version is installed, it will replace the placeholder with a directory. This makes it easier for users to see what versions are available for install, and what the latest and stable versions are.
This commit is contained in:
		
							
								
								
									
										69
									
								
								nvm.sh
									
									
									
									
									
								
							
							
						
						
									
										69
									
								
								nvm.sh
									
									
									
									
									
								
							| @@ -8,6 +8,41 @@ | ||||
| # 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 | ||||
| } | ||||
|  | ||||
| nvm() | ||||
| { | ||||
|   if [ $# -lt 1 ]; then | ||||
| @@ -23,8 +58,10 @@ nvm() | ||||
|       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 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 sync                Update the local cache of available versions" | ||||
|       echo | ||||
|       echo "Example:" | ||||
|       echo "    nvm install v0.2.5" | ||||
| @@ -38,6 +75,7 @@ nvm() | ||||
|       fi | ||||
|       START=`pwd` | ||||
|       mkdir -p "$NVM_DIR/src" && \ | ||||
|       rm -f "$NVM_DIR/$2" && \ | ||||
|       cd "$NVM_DIR/src" && \ | ||||
|       wget "http://nodejs.org/dist/node-$2.tar.gz" -N && \ | ||||
|       tar -xzf "node-$2.tar.gz" && \ | ||||
| @@ -93,16 +131,31 @@ nvm() | ||||
|     ;; | ||||
|     "ls" ) | ||||
|       if [ $# -ne 1 ]; then | ||||
|         nvm help | ||||
|         version $2 | ||||
|         return; | ||||
|       fi | ||||
|       for f in $NVM_DIR/v*; do | ||||
|         if [[ $PATH == *$f/bin* ]]; then | ||||
|           echo "v${f##*v} *" | ||||
|         else | ||||
|           echo "v${f##*v}" | ||||
|         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 | ||||
|     ;; | ||||
|     * ) | ||||
|       nvm help | ||||
|   | ||||
		Reference in New Issue
	
	Block a user