mirror of
https://github.com/nvm-sh/nvm.git
synced 2025-05-10 14:21:50 +00:00

`nvm use`, `nvm run` and others check if the version is installed before executing Node, but the error message could be clearer on what steps the user has to take to achieve what they want, this makes that clearer.
2644 lines
77 KiB
Bash
2644 lines
77 KiB
Bash
# Node Version Manager
|
|
# Implemented as a POSIX-compliant function
|
|
# Should work on sh, dash, bash, ksh, zsh
|
|
# To use source this file from your bash profile
|
|
#
|
|
# Implemented by Tim Caswell <tim@creationix.com>
|
|
# with much bash help from Matthew Ranney
|
|
|
|
# "local" warning, quote expansion warning
|
|
# shellcheck disable=SC2039,SC2016
|
|
{ # this ensures the entire script is downloaded #
|
|
|
|
NVM_SCRIPT_SOURCE="$_"
|
|
|
|
nvm_echo() {
|
|
command printf %s\\n "$*" 2>/dev/null || {
|
|
nvm_echo() {
|
|
\printf %s\\n "$*" # on zsh, `command printf` sometimes fails
|
|
}
|
|
nvm_echo "$@"
|
|
}
|
|
}
|
|
|
|
nvm_err() {
|
|
>&2 nvm_echo "$@"
|
|
}
|
|
|
|
nvm_grep() {
|
|
GREP_OPTIONS='' command grep "$@"
|
|
}
|
|
|
|
nvm_has() {
|
|
type "$1" > /dev/null 2>&1
|
|
}
|
|
|
|
nvm_is_alias() {
|
|
# this is intentionally not "command alias" so it works in zsh.
|
|
\alias "$1" > /dev/null 2>&1
|
|
}
|
|
|
|
nvm_has_colors() {
|
|
local NVM_COLORS
|
|
NVM_COLORS="$(tput -T "${TERM:-vt100}" colors)"
|
|
[ "${NVM_COLORS:--1}" -ge 8 ]
|
|
}
|
|
|
|
nvm_get_latest() {
|
|
local NVM_LATEST_URL
|
|
if nvm_has "curl"; then
|
|
NVM_LATEST_URL="$(curl -q -w "%{url_effective}\n" -L -s -S http://latest.nvm.sh -o /dev/null)"
|
|
elif nvm_has "wget"; then
|
|
NVM_LATEST_URL="$(wget http://latest.nvm.sh --server-response -O /dev/null 2>&1 | command awk '/^ Location: /{DEST=$2} END{ print DEST }')"
|
|
else
|
|
nvm_err 'nvm needs curl or wget to proceed.'
|
|
return 1
|
|
fi
|
|
if [ -z "$NVM_LATEST_URL" ]; then
|
|
nvm_err "http://latest.nvm.sh did not redirect to the latest release on Github"
|
|
return 2
|
|
fi
|
|
nvm_echo "${NVM_LATEST_URL##*/}"
|
|
}
|
|
|
|
nvm_download() {
|
|
if nvm_has "curl"; then
|
|
curl -q "$@"
|
|
elif nvm_has "wget"; then
|
|
# Emulate curl with wget
|
|
ARGS=$(nvm_echo "$@" | command sed -e 's/--progress-bar /--progress=bar /' \
|
|
-e 's/-L //' \
|
|
-e 's/-I /--server-response /' \
|
|
-e 's/-s /-q /' \
|
|
-e 's/-o /-O /' \
|
|
-e 's/-C - /-c /')
|
|
eval wget $ARGS
|
|
fi
|
|
}
|
|
|
|
nvm_has_system_node() {
|
|
[ "$(nvm deactivate >/dev/null 2>&1 && command -v node)" != '' ]
|
|
}
|
|
|
|
nvm_has_system_iojs() {
|
|
[ "$(nvm deactivate >/dev/null 2>&1 && command -v iojs)" != '' ]
|
|
}
|
|
|
|
nvm_is_version_installed() {
|
|
[ -n "${1-}" ] && [ -d "$(nvm_version_path "${1-}" 2> /dev/null)" ]
|
|
}
|
|
|
|
nvm_print_npm_version() {
|
|
if nvm_has "npm"; then
|
|
command printf " (npm v$(npm --version 2>/dev/null))"
|
|
fi
|
|
}
|
|
|
|
# Make zsh glob matching behave same as bash
|
|
# This fixes the "zsh: no matches found" errors
|
|
if [ -z "${NVM_CD_FLAGS-}" ]; then
|
|
export NVM_CD_FLAGS=''
|
|
fi
|
|
if nvm_has "unsetopt"; then
|
|
unsetopt nomatch 2>/dev/null
|
|
NVM_CD_FLAGS="-q"
|
|
fi
|
|
|
|
# Auto detect the NVM_DIR when not set
|
|
if [ -z "${NVM_DIR-}" ]; then
|
|
# shellcheck disable=SC2128
|
|
if [ -n "$BASH_SOURCE" ]; then
|
|
NVM_SCRIPT_SOURCE="${BASH_SOURCE[0]}"
|
|
fi
|
|
NVM_DIR="$(cd $NVM_CD_FLAGS "$(dirname "${NVM_SCRIPT_SOURCE:-$0}")" > /dev/null && \pwd)"
|
|
export NVM_DIR
|
|
fi
|
|
unset NVM_SCRIPT_SOURCE 2> /dev/null
|
|
|
|
|
|
# Setup mirror location if not already set
|
|
if [ -z "${NVM_NODEJS_ORG_MIRROR-}" ]; then
|
|
export NVM_NODEJS_ORG_MIRROR="https://nodejs.org/dist"
|
|
fi
|
|
|
|
if [ -z "${NVM_IOJS_ORG_MIRROR-}" ]; then
|
|
export NVM_IOJS_ORG_MIRROR="https://iojs.org/dist"
|
|
fi
|
|
|
|
nvm_tree_contains_path() {
|
|
local tree
|
|
tree="$1"
|
|
local node_path
|
|
node_path="$2"
|
|
|
|
if [ "@$tree@" = "@@" ] || [ "@$node_path@" = "@@" ]; then
|
|
nvm_err "both the tree and the node path are required"
|
|
return 2
|
|
fi
|
|
|
|
local pathdir
|
|
pathdir=$(dirname "$node_path")
|
|
while [ "$pathdir" != "" ] && [ "$pathdir" != "." ] && [ "$pathdir" != "/" ] && [ "$pathdir" != "$tree" ]; do
|
|
pathdir=$(dirname "$pathdir")
|
|
done
|
|
[ "$pathdir" = "$tree" ]
|
|
}
|
|
|
|
# Traverse up in directory tree to find containing folder
|
|
nvm_find_up() {
|
|
local path
|
|
path="$PWD"
|
|
while [ "$path" != "" ] && [ ! -f "$path/$1" ]; do
|
|
path=${path%/*}
|
|
done
|
|
nvm_echo "$path"
|
|
}
|
|
|
|
|
|
nvm_find_nvmrc() {
|
|
local dir
|
|
dir="$(nvm_find_up '.nvmrc')"
|
|
if [ -e "$dir/.nvmrc" ]; then
|
|
nvm_echo "$dir/.nvmrc"
|
|
fi
|
|
}
|
|
|
|
# Obtain nvm version from rc file
|
|
nvm_rc_version() {
|
|
export NVM_RC_VERSION=''
|
|
local NVMRC_PATH
|
|
NVMRC_PATH="$(nvm_find_nvmrc)"
|
|
if [ -e "$NVMRC_PATH" ]; then
|
|
read -r NVM_RC_VERSION < "$NVMRC_PATH" || printf ''
|
|
if [ -n "$NVM_RC_VERSION" ]; then
|
|
nvm_echo "Found '$NVMRC_PATH' with version <$NVM_RC_VERSION>"
|
|
else
|
|
nvm_err "Warning: empty .nvmrc file found at \"$NVMRC_PATH\""
|
|
return 2
|
|
fi
|
|
else
|
|
nvm_err "No .nvmrc file found"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
nvm_version_greater() {
|
|
command awk 'BEGIN {
|
|
if (ARGV[1] == "" || ARGV[2] == "") exit(1)
|
|
split(ARGV[1], a, /\./);
|
|
split(ARGV[2], b, /\./);
|
|
for (i=1; i<=3; i++) {
|
|
if (a[i] && a[i] !~ /^[0-9]+$/) exit(2);
|
|
if (b[i] && b[i] !~ /^[0-9]+$/) { exit(0); }
|
|
if (a[i] < b[i]) exit(3);
|
|
else if (a[i] > b[i]) exit(0);
|
|
}
|
|
exit(4)
|
|
}' "${1#v}" "${2#v}";
|
|
}
|
|
|
|
nvm_version_greater_than_or_equal_to() {
|
|
command awk 'BEGIN {
|
|
if (ARGV[1] == "" || ARGV[2] == "") exit(1)
|
|
split(ARGV[1], a, /\./);
|
|
split(ARGV[2], b, /\./);
|
|
for (i=1; i<=3; i++) {
|
|
if (a[i] && a[i] !~ /^[0-9]+$/) exit(2);
|
|
if (a[i] < b[i]) exit(3);
|
|
else if (a[i] > b[i]) exit(0);
|
|
}
|
|
exit(0)
|
|
}' "${1#v}" "${2#v}";
|
|
}
|
|
|
|
nvm_version_dir() {
|
|
local NVM_WHICH_DIR
|
|
NVM_WHICH_DIR="$1"
|
|
if [ -z "$NVM_WHICH_DIR" ] || [ "_$NVM_WHICH_DIR" = "_new" ]; then
|
|
nvm_echo "$NVM_DIR/versions/node"
|
|
elif [ "_$NVM_WHICH_DIR" = "_iojs" ]; then
|
|
nvm_echo "$NVM_DIR/versions/io.js"
|
|
elif [ "_$NVM_WHICH_DIR" = "_old" ]; then
|
|
nvm_echo "$NVM_DIR"
|
|
else
|
|
nvm_err 'unknown version dir'
|
|
return 3
|
|
fi
|
|
}
|
|
|
|
nvm_alias_path() {
|
|
nvm_echo "$(nvm_version_dir old)/alias"
|
|
}
|
|
|
|
nvm_version_path() {
|
|
local VERSION
|
|
VERSION="$1"
|
|
if [ -z "$VERSION" ]; then
|
|
nvm_err 'version is required'
|
|
return 3
|
|
elif nvm_is_iojs_version "$VERSION"; then
|
|
nvm_echo "$(nvm_version_dir iojs)/$(nvm_strip_iojs_prefix "$VERSION")"
|
|
elif nvm_version_greater 0.12.0 "$VERSION"; then
|
|
nvm_echo "$(nvm_version_dir old)/$VERSION"
|
|
else
|
|
nvm_echo "$(nvm_version_dir new)/$VERSION"
|
|
fi
|
|
}
|
|
|
|
nvm_ensure_version_installed() {
|
|
local PROVIDED_VERSION
|
|
PROVIDED_VERSION="$1"
|
|
local LOCAL_VERSION
|
|
local EXIT_CODE
|
|
LOCAL_VERSION="$(nvm_version "$PROVIDED_VERSION")"
|
|
EXIT_CODE="$?"
|
|
local NVM_VERSION_DIR
|
|
if [ "_$EXIT_CODE" != "_0" ] || ! nvm_is_version_installed "$LOCAL_VERSION"; then
|
|
VERSION="$(nvm_resolve_alias "$PROVIDED_VERSION")"
|
|
if [ $? -eq 0 ]; then
|
|
nvm_err "N/A: version \"$PROVIDED_VERSION -> $VERSION\" is not yet installed.
|
|
|
|
You need to run \"npm install $PROVIDED_VERSION\" to install it before using it."
|
|
else
|
|
local PREFIXED_VERSION
|
|
PREFIXED_VERSION="$(nvm_ensure_version_prefix "$PROVIDED_VERSION")"
|
|
nvm_err "N/A: version \"${PREFIXED_VERSION:-$PROVIDED_VERSION}\" is not yet installed.
|
|
|
|
You need to run \"npm install $PROVIDED_VERSION\" to install it before using it."
|
|
fi
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Expand a version using the version cache
|
|
nvm_version() {
|
|
local PATTERN
|
|
PATTERN="$1"
|
|
local VERSION
|
|
# The default version is the current one
|
|
if [ -z "$PATTERN" ]; then
|
|
PATTERN='current'
|
|
fi
|
|
|
|
if [ "$PATTERN" = "current" ]; then
|
|
nvm_ls_current
|
|
return $?
|
|
fi
|
|
|
|
local NVM_NODE_PREFIX
|
|
NVM_NODE_PREFIX="$(nvm_node_prefix)"
|
|
case "_$PATTERN" in
|
|
"_$NVM_NODE_PREFIX" | "_$NVM_NODE_PREFIX-")
|
|
PATTERN="stable"
|
|
;;
|
|
esac
|
|
VERSION="$(nvm_ls "$PATTERN" | command tail -n1)"
|
|
if [ -z "$VERSION" ] || [ "_$VERSION" = "_N/A" ]; then
|
|
nvm_echo "N/A"
|
|
return 3;
|
|
else
|
|
nvm_echo "$VERSION"
|
|
fi
|
|
}
|
|
|
|
nvm_remote_version() {
|
|
local PATTERN
|
|
PATTERN="$1"
|
|
local VERSION
|
|
if nvm_validate_implicit_alias "$PATTERN" 2> /dev/null ; then
|
|
case "_$PATTERN" in
|
|
"_$(nvm_iojs_prefix)")
|
|
VERSION="$(nvm_ls_remote_iojs | command tail -n1)"
|
|
;;
|
|
*)
|
|
VERSION="$(nvm_ls_remote "$PATTERN")"
|
|
;;
|
|
esac
|
|
else
|
|
VERSION="$(nvm_remote_versions "$PATTERN" | command tail -n1)"
|
|
fi
|
|
nvm_echo "$VERSION"
|
|
if [ "_$VERSION" = '_N/A' ]; then
|
|
return 3
|
|
fi
|
|
}
|
|
|
|
nvm_remote_versions() {
|
|
local NVM_IOJS_PREFIX
|
|
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
|
|
local PATTERN
|
|
PATTERN="$1"
|
|
case "_$PATTERN" in
|
|
"_$NVM_IOJS_PREFIX" | "_io.js")
|
|
VERSIONS="$(nvm_ls_remote_iojs)"
|
|
;;
|
|
"_$(nvm_node_prefix)")
|
|
VERSIONS="$(nvm_ls_remote)"
|
|
;;
|
|
*)
|
|
if nvm_validate_implicit_alias "$PATTERN" 2> /dev/null ; then
|
|
nvm_err 'Implicit aliases are not supported in nvm_remote_versions.'
|
|
return 1
|
|
fi
|
|
VERSIONS="$(nvm_echo "$(nvm_ls_remote "$PATTERN")
|
|
$(nvm_ls_remote_iojs "$PATTERN")" | nvm_grep -v "N/A" | command sed '/^$/d')"
|
|
;;
|
|
esac
|
|
|
|
if [ -z "$VERSIONS" ]; then
|
|
nvm_echo 'N/A'
|
|
return 3
|
|
else
|
|
nvm_echo "$VERSIONS"
|
|
fi
|
|
}
|
|
|
|
nvm_is_valid_version() {
|
|
if nvm_validate_implicit_alias "$1" 2> /dev/null; then
|
|
return 0
|
|
fi
|
|
case "$1" in
|
|
"$(nvm_iojs_prefix)" | \
|
|
"$(nvm_node_prefix)")
|
|
return 0
|
|
;;
|
|
*)
|
|
local VERSION
|
|
VERSION="$(nvm_strip_iojs_prefix "$1")"
|
|
nvm_version_greater_than_or_equal_to "$VERSION" 0
|
|
;;
|
|
esac
|
|
}
|
|
|
|
nvm_normalize_version() {
|
|
command awk 'BEGIN {
|
|
split(ARGV[1], a, /\./);
|
|
printf "%d%06d%06d\n", a[1], a[2], a[3];
|
|
exit;
|
|
}' "${1#v}"
|
|
}
|
|
|
|
nvm_ensure_version_prefix() {
|
|
local NVM_VERSION
|
|
NVM_VERSION="$(nvm_strip_iojs_prefix "$1" | command sed -e 's/^\([0-9]\)/v\1/g')"
|
|
if nvm_is_iojs_version "$1"; then
|
|
nvm_add_iojs_prefix "$NVM_VERSION"
|
|
else
|
|
nvm_echo "$NVM_VERSION"
|
|
fi
|
|
}
|
|
|
|
nvm_format_version() {
|
|
local VERSION
|
|
VERSION="$(nvm_ensure_version_prefix "$1")"
|
|
local NUM_GROUPS
|
|
NUM_GROUPS="$(nvm_num_version_groups "$VERSION")"
|
|
if [ "$NUM_GROUPS" -lt 3 ]; then
|
|
nvm_format_version "${VERSION%.}.0"
|
|
else
|
|
nvm_echo "$VERSION" | cut -f1-3 -d.
|
|
fi
|
|
}
|
|
|
|
nvm_num_version_groups() {
|
|
local VERSION
|
|
VERSION="$1"
|
|
VERSION="${VERSION#v}"
|
|
VERSION="${VERSION%.}"
|
|
if [ -z "$VERSION" ]; then
|
|
nvm_echo "0"
|
|
return
|
|
fi
|
|
local NVM_NUM_DOTS
|
|
NVM_NUM_DOTS=$(nvm_echo "$VERSION" | command sed -e 's/[^\.]//g')
|
|
local NVM_NUM_GROUPS
|
|
NVM_NUM_GROUPS=".$NVM_NUM_DOTS" # add extra dot, since it's (n - 1) dots at this point
|
|
nvm_echo "${#NVM_NUM_GROUPS}"
|
|
}
|
|
|
|
nvm_strip_path() {
|
|
if [ -z "${NVM_DIR-}" ]; then
|
|
nvm_err '$NVM_DIR not set!'
|
|
return 1
|
|
fi
|
|
nvm_echo "$1" | command sed \
|
|
-e "s#$NVM_DIR/[^/]*$2[^:]*:##g" \
|
|
-e "s#:$NVM_DIR/[^/]*$2[^:]*##g" \
|
|
-e "s#$NVM_DIR/[^/]*$2[^:]*##g" \
|
|
-e "s#$NVM_DIR/versions/[^/]*/[^/]*$2[^:]*:##g" \
|
|
-e "s#:$NVM_DIR/versions/[^/]*/[^/]*$2[^:]*##g" \
|
|
-e "s#$NVM_DIR/versions/[^/]*/[^/]*$2[^:]*##g"
|
|
}
|
|
|
|
nvm_prepend_path() {
|
|
if [ -z "$1" ]; then
|
|
nvm_echo "$2"
|
|
else
|
|
nvm_echo "$2:$1"
|
|
fi
|
|
}
|
|
|
|
nvm_binary_available() {
|
|
# binaries started with node 0.8.6
|
|
nvm_version_greater_than_or_equal_to "$(nvm_strip_iojs_prefix "${1-}")" v0.8.6
|
|
}
|
|
|
|
nvm_print_formatted_alias() {
|
|
local ALIAS
|
|
ALIAS="${1-}"
|
|
local DEST
|
|
DEST="${2-}"
|
|
local VERSION
|
|
VERSION="${3-}"
|
|
if [ -z "$VERSION" ]; then
|
|
VERSION="$(nvm_version "$DEST" || return 0)"
|
|
fi
|
|
local VERSION_FORMAT
|
|
local ALIAS_FORMAT
|
|
local DEST_FORMAT
|
|
ALIAS_FORMAT='%s'
|
|
DEST_FORMAT='%s'
|
|
VERSION_FORMAT='%s'
|
|
local NEWLINE
|
|
NEWLINE="\n"
|
|
if [ "_$DEFAULT" = '_true' ]; then
|
|
NEWLINE=" (default)\n"
|
|
fi
|
|
local ARROW
|
|
ARROW='->'
|
|
if nvm_has_colors; then
|
|
ARROW='\033[0;90m->\033[0m'
|
|
if [ "_$DEFAULT" = '_true' ]; then
|
|
NEWLINE=" \033[0;37m(default)\033[0m\n"
|
|
fi
|
|
if [ "_$VERSION" = "_${NVM_CURRENT-}" ]; then
|
|
ALIAS_FORMAT='\033[0;32m%s\033[0m'
|
|
DEST_FORMAT='\033[0;32m%s\033[0m'
|
|
VERSION_FORMAT='\033[0;32m%s\033[0m'
|
|
elif nvm_is_version_installed "$VERSION"; then
|
|
ALIAS_FORMAT='\033[0;34m%s\033[0m'
|
|
DEST_FORMAT='\033[0;34m%s\033[0m'
|
|
VERSION_FORMAT='\033[0;34m%s\033[0m'
|
|
elif [ "_$VERSION" = '_∞' ] || [ "_$VERSION" = '_N/A' ]; then
|
|
ALIAS_FORMAT='\033[1;31m%s\033[0m'
|
|
DEST_FORMAT='\033[1;31m%s\033[0m'
|
|
VERSION_FORMAT='\033[1;31m%s\033[0m'
|
|
fi
|
|
fi
|
|
if [ "_$DEST" = "_$VERSION" ]; then
|
|
command printf "${ALIAS_FORMAT} ${ARROW} ${VERSION_FORMAT}${NEWLINE}" "$ALIAS" "$DEST"
|
|
else
|
|
command printf "${ALIAS_FORMAT} ${ARROW} ${DEST_FORMAT} (${ARROW} ${VERSION_FORMAT})${NEWLINE}" "$ALIAS" "$DEST" "$VERSION"
|
|
fi
|
|
}
|
|
|
|
nvm_print_alias_path() {
|
|
local NVM_ALIAS_DIR
|
|
NVM_ALIAS_DIR="${1-}"
|
|
if [ -z "$NVM_ALIAS_DIR" ]; then
|
|
nvm_err 'An alias dir is required.'
|
|
return 1
|
|
fi
|
|
local ALIAS_PATH
|
|
ALIAS_PATH="${2-}"
|
|
if [ -z "$ALIAS_PATH" ]; then
|
|
nvm_err 'An alias path is required.'
|
|
return 2
|
|
fi
|
|
local ALIAS
|
|
ALIAS="${ALIAS_PATH##$NVM_ALIAS_DIR\/}"
|
|
local DEST
|
|
DEST="$(nvm_alias "$ALIAS" 2> /dev/null || return 0)"
|
|
if [ -n "$DEST" ]; then
|
|
DEFAULT=false nvm_print_formatted_alias "$ALIAS" "$DEST"
|
|
fi
|
|
}
|
|
|
|
nvm_print_default_alias() {
|
|
local ALIAS
|
|
ALIAS="${1-}"
|
|
if [ -z "$ALIAS" ]; then
|
|
nvm_err 'A default alias is required.'
|
|
return 1
|
|
fi
|
|
local DEST
|
|
DEST="$(nvm_print_implicit_alias local "$ALIAS")"
|
|
if [ -n "$DEST" ]; then
|
|
DEFAULT=true nvm_print_formatted_alias "$ALIAS" "$DEST"
|
|
fi
|
|
}
|
|
|
|
nvm_make_alias() {
|
|
local ALIAS
|
|
ALIAS="${1-}"
|
|
if [ -z "$ALIAS" ]; then
|
|
nvm_err "an alias name is required"
|
|
return 1
|
|
fi
|
|
local VERSION
|
|
VERSION="${2-}"
|
|
if [ -z "$VERSION" ]; then
|
|
nvm_err "an alias target version is required"
|
|
return 2
|
|
fi
|
|
nvm_echo "$VERSION" | tee "$(nvm_alias_path)/${ALIAS}" >/dev/null
|
|
}
|
|
|
|
nvm_alias() {
|
|
local ALIAS
|
|
ALIAS="${1-}"
|
|
if [ -z "$ALIAS" ]; then
|
|
nvm_err 'An alias is required.'
|
|
return 1
|
|
fi
|
|
|
|
local NVM_ALIAS_PATH
|
|
NVM_ALIAS_PATH="$(nvm_alias_path)/$ALIAS"
|
|
if [ ! -f "$NVM_ALIAS_PATH" ]; then
|
|
nvm_err 'Alias does not exist.'
|
|
return 2
|
|
fi
|
|
|
|
command cat "$NVM_ALIAS_PATH"
|
|
}
|
|
|
|
nvm_ls_current() {
|
|
local NVM_LS_CURRENT_NODE_PATH
|
|
NVM_LS_CURRENT_NODE_PATH="$(command which node 2> /dev/null)"
|
|
if [ $? -ne 0 ]; then
|
|
nvm_echo 'none'
|
|
elif nvm_tree_contains_path "$(nvm_version_dir iojs)" "$NVM_LS_CURRENT_NODE_PATH"; then
|
|
nvm_add_iojs_prefix "$(iojs --version 2>/dev/null)"
|
|
elif nvm_tree_contains_path "$NVM_DIR" "$NVM_LS_CURRENT_NODE_PATH"; then
|
|
local VERSION
|
|
VERSION="$(node --version 2>/dev/null)"
|
|
if [ "$VERSION" = "v0.6.21-pre" ]; then
|
|
nvm_echo 'v0.6.21'
|
|
else
|
|
nvm_echo "$VERSION"
|
|
fi
|
|
else
|
|
nvm_echo 'system'
|
|
fi
|
|
}
|
|
|
|
nvm_resolve_alias() {
|
|
if [ -z "$1" ]; then
|
|
return 1
|
|
fi
|
|
|
|
local PATTERN
|
|
PATTERN="$1"
|
|
|
|
local ALIAS
|
|
ALIAS="$PATTERN"
|
|
local ALIAS_TEMP
|
|
|
|
local SEEN_ALIASES
|
|
SEEN_ALIASES="$ALIAS"
|
|
while true; do
|
|
ALIAS_TEMP="$(nvm_alias "$ALIAS" 2> /dev/null)"
|
|
|
|
if [ -z "$ALIAS_TEMP" ]; then
|
|
break
|
|
fi
|
|
|
|
if [ -n "$ALIAS_TEMP" ] \
|
|
&& command printf "$SEEN_ALIASES" | nvm_grep -e "^$ALIAS_TEMP$" > /dev/null; then
|
|
ALIAS="∞"
|
|
break
|
|
fi
|
|
|
|
SEEN_ALIASES="$SEEN_ALIASES\n$ALIAS_TEMP"
|
|
ALIAS="$ALIAS_TEMP"
|
|
done
|
|
|
|
if [ -n "$ALIAS" ] && [ "_$ALIAS" != "_$PATTERN" ]; then
|
|
local NVM_IOJS_PREFIX
|
|
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
|
|
local NVM_NODE_PREFIX
|
|
NVM_NODE_PREFIX="$(nvm_node_prefix)"
|
|
case "_$ALIAS" in
|
|
"_∞" | \
|
|
"_$NVM_IOJS_PREFIX" | "_$NVM_IOJS_PREFIX-" | \
|
|
"_$NVM_NODE_PREFIX" )
|
|
nvm_echo "$ALIAS"
|
|
;;
|
|
*)
|
|
nvm_ensure_version_prefix "$ALIAS"
|
|
;;
|
|
esac
|
|
return 0
|
|
fi
|
|
|
|
if nvm_validate_implicit_alias "$PATTERN" 2> /dev/null ; then
|
|
local IMPLICIT
|
|
IMPLICIT="$(nvm_print_implicit_alias local "$PATTERN" 2> /dev/null)"
|
|
if [ -n "$IMPLICIT" ]; then
|
|
nvm_ensure_version_prefix "$IMPLICIT"
|
|
fi
|
|
fi
|
|
|
|
return 2
|
|
}
|
|
|
|
nvm_resolve_local_alias() {
|
|
if [ -z "$1" ]; then
|
|
return 1
|
|
fi
|
|
|
|
local VERSION
|
|
local EXIT_CODE
|
|
VERSION="$(nvm_resolve_alias "$1")"
|
|
EXIT_CODE=$?
|
|
if [ -z "$VERSION" ]; then
|
|
return $EXIT_CODE
|
|
fi
|
|
if [ "_$VERSION" != "_∞" ]; then
|
|
nvm_version "$VERSION"
|
|
else
|
|
nvm_echo "$VERSION"
|
|
fi
|
|
}
|
|
|
|
nvm_iojs_prefix() {
|
|
nvm_echo 'iojs'
|
|
}
|
|
nvm_node_prefix() {
|
|
nvm_echo 'node'
|
|
}
|
|
|
|
nvm_is_iojs_version() {
|
|
case "$1" in iojs-*) return 0 ;; esac
|
|
return 1
|
|
}
|
|
|
|
nvm_add_iojs_prefix() {
|
|
nvm_echo "$(nvm_iojs_prefix)-$(nvm_ensure_version_prefix "$(nvm_strip_iojs_prefix "$1")")"
|
|
}
|
|
|
|
nvm_strip_iojs_prefix() {
|
|
local NVM_IOJS_PREFIX
|
|
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
|
|
if [ "_$1" = "_$NVM_IOJS_PREFIX" ]; then
|
|
nvm_echo
|
|
else
|
|
nvm_echo "${1#"$NVM_IOJS_PREFIX"-}"
|
|
fi
|
|
}
|
|
|
|
nvm_ls() {
|
|
local PATTERN
|
|
PATTERN="${1-}"
|
|
local VERSIONS
|
|
VERSIONS=''
|
|
if [ "$PATTERN" = 'current' ]; then
|
|
nvm_ls_current
|
|
return
|
|
fi
|
|
|
|
local NVM_IOJS_PREFIX
|
|
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
|
|
local NVM_NODE_PREFIX
|
|
NVM_NODE_PREFIX="$(nvm_node_prefix)"
|
|
local NVM_VERSION_DIR_IOJS
|
|
NVM_VERSION_DIR_IOJS="$(nvm_version_dir "$NVM_IOJS_PREFIX")"
|
|
local NVM_VERSION_DIR_NEW
|
|
NVM_VERSION_DIR_NEW="$(nvm_version_dir new)"
|
|
local NVM_VERSION_DIR_OLD
|
|
NVM_VERSION_DIR_OLD="$(nvm_version_dir old)"
|
|
|
|
case "$PATTERN" in
|
|
"$NVM_IOJS_PREFIX" | "$NVM_NODE_PREFIX" )
|
|
PATTERN="$PATTERN-"
|
|
;;
|
|
*)
|
|
if nvm_resolve_local_alias "$PATTERN"; then
|
|
return
|
|
fi
|
|
PATTERN="$(nvm_ensure_version_prefix "$PATTERN")"
|
|
;;
|
|
esac
|
|
if [ "_$PATTERN" = "_N/A" ]; then
|
|
return
|
|
fi
|
|
# If it looks like an explicit version, don't do anything funny
|
|
local NVM_PATTERN_STARTS_WITH_V
|
|
case $PATTERN in
|
|
v*) NVM_PATTERN_STARTS_WITH_V=true ;;
|
|
*) NVM_PATTERN_STARTS_WITH_V=false ;;
|
|
esac
|
|
if [ $NVM_PATTERN_STARTS_WITH_V = true ] && [ "_$(nvm_num_version_groups "$PATTERN")" = "_3" ]; then
|
|
if nvm_is_version_installed "$PATTERN"; then
|
|
VERSIONS="$PATTERN"
|
|
elif nvm_is_version_installed "$(nvm_add_iojs_prefix "$PATTERN")"; then
|
|
VERSIONS="$(nvm_add_iojs_prefix "$PATTERN")"
|
|
fi
|
|
else
|
|
case "$PATTERN" in
|
|
"$NVM_IOJS_PREFIX-" | "$NVM_NODE_PREFIX-" | "system") ;;
|
|
*)
|
|
local NUM_VERSION_GROUPS
|
|
NUM_VERSION_GROUPS="$(nvm_num_version_groups "$PATTERN")"
|
|
if [ "_$NUM_VERSION_GROUPS" = "_2" ] || [ "_$NUM_VERSION_GROUPS" = "_1" ]; then
|
|
PATTERN="${PATTERN%.}."
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
local ZHS_HAS_SHWORDSPLIT_UNSET
|
|
ZHS_HAS_SHWORDSPLIT_UNSET=1
|
|
if nvm_has "setopt"; then
|
|
ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | nvm_grep shwordsplit > /dev/null ; nvm_echo $?)
|
|
setopt shwordsplit
|
|
fi
|
|
|
|
local NVM_DIRS_TO_SEARCH1
|
|
NVM_DIRS_TO_SEARCH1=''
|
|
local NVM_DIRS_TO_SEARCH2
|
|
NVM_DIRS_TO_SEARCH2=''
|
|
local NVM_DIRS_TO_SEARCH3
|
|
NVM_DIRS_TO_SEARCH3=''
|
|
local NVM_ADD_SYSTEM
|
|
NVM_ADD_SYSTEM=false
|
|
if nvm_is_iojs_version "$PATTERN"; then
|
|
NVM_DIRS_TO_SEARCH1="$NVM_VERSION_DIR_IOJS"
|
|
PATTERN="$(nvm_strip_iojs_prefix "$PATTERN")"
|
|
if nvm_has_system_iojs; then
|
|
NVM_ADD_SYSTEM=true
|
|
fi
|
|
elif [ "_$PATTERN" = "_$NVM_NODE_PREFIX-" ]; then
|
|
NVM_DIRS_TO_SEARCH1="$NVM_VERSION_DIR_OLD"
|
|
NVM_DIRS_TO_SEARCH2="$NVM_VERSION_DIR_NEW"
|
|
PATTERN=''
|
|
if nvm_has_system_node; then
|
|
NVM_ADD_SYSTEM=true
|
|
fi
|
|
else
|
|
NVM_DIRS_TO_SEARCH1="$NVM_VERSION_DIR_OLD"
|
|
NVM_DIRS_TO_SEARCH2="$NVM_VERSION_DIR_NEW"
|
|
NVM_DIRS_TO_SEARCH3="$NVM_VERSION_DIR_IOJS"
|
|
if nvm_has_system_iojs || nvm_has_system_node; then
|
|
NVM_ADD_SYSTEM=true
|
|
fi
|
|
fi
|
|
|
|
if ! [ -d "$NVM_DIRS_TO_SEARCH1" ] || ! (command ls -1qA "$NVM_DIRS_TO_SEARCH1" | nvm_grep -q .); then
|
|
NVM_DIRS_TO_SEARCH1=''
|
|
fi
|
|
if ! [ -d "$NVM_DIRS_TO_SEARCH2" ] || ! (command ls -1qA "$NVM_DIRS_TO_SEARCH2" | nvm_grep -q .); then
|
|
NVM_DIRS_TO_SEARCH2="$NVM_DIRS_TO_SEARCH1"
|
|
fi
|
|
if ! [ -d "$NVM_DIRS_TO_SEARCH3" ] || ! (command ls -1qA "$NVM_DIRS_TO_SEARCH3" | nvm_grep -q .); then
|
|
NVM_DIRS_TO_SEARCH3="$NVM_DIRS_TO_SEARCH2"
|
|
fi
|
|
|
|
local SEARCH_PATTERN
|
|
if [ -z "$PATTERN" ]; then
|
|
PATTERN='v'
|
|
SEARCH_PATTERN='.*'
|
|
else
|
|
SEARCH_PATTERN="$(echo "${PATTERN}" | sed "s#\.#\\\.#g;")"
|
|
fi
|
|
if [ -n "$NVM_DIRS_TO_SEARCH1$NVM_DIRS_TO_SEARCH2$NVM_DIRS_TO_SEARCH3" ]; then
|
|
VERSIONS="$(command find "$NVM_DIRS_TO_SEARCH1"/* "$NVM_DIRS_TO_SEARCH2"/* "$NVM_DIRS_TO_SEARCH3"/* -name . -o -type d -prune -o -name "$PATTERN*" \
|
|
| command sed "
|
|
s#${NVM_VERSION_DIR_IOJS}/#versions/${NVM_IOJS_PREFIX}/#;
|
|
s#^${NVM_DIR}/##;
|
|
\#^[^v]# d;
|
|
\#^versions\$# d;
|
|
s#^versions/##;
|
|
s#^v#${NVM_NODE_PREFIX}/v#;
|
|
\#${SEARCH_PATTERN}# !d;
|
|
" \
|
|
| command sed "s#^\([^/]\{1,\}\)/\(.*\)\$#\2.\1#;" \
|
|
| command sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n \
|
|
| command sed "
|
|
s#\(.*\)\.\([^\.]\{1,\}\)\$#\2-\1#;
|
|
s#^${NVM_NODE_PREFIX}-##;
|
|
" \
|
|
)"
|
|
fi
|
|
|
|
if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
|
|
unsetopt shwordsplit
|
|
fi
|
|
fi
|
|
|
|
if [ "${NVM_ADD_SYSTEM-}" = true ]; then
|
|
if [ -z "$PATTERN" ] || [ "_$PATTERN" = "_v" ]; then
|
|
VERSIONS="$VERSIONS$(command printf '\n%s' 'system')"
|
|
elif [ "$PATTERN" = 'system' ]; then
|
|
VERSIONS="$(command printf '%s' 'system')"
|
|
fi
|
|
fi
|
|
|
|
if [ -z "$VERSIONS" ]; then
|
|
nvm_echo 'N/A'
|
|
return 3
|
|
fi
|
|
|
|
nvm_echo "$VERSIONS"
|
|
}
|
|
|
|
nvm_ls_remote() {
|
|
local PATTERN
|
|
PATTERN="$1"
|
|
if nvm_validate_implicit_alias "$PATTERN" 2> /dev/null ; then
|
|
PATTERN="$(nvm_ls_remote "$(nvm_print_implicit_alias remote "$PATTERN")" | command tail -n1)"
|
|
elif [ -n "$PATTERN" ]; then
|
|
PATTERN="$(nvm_ensure_version_prefix "$PATTERN")"
|
|
else
|
|
PATTERN=".*"
|
|
fi
|
|
nvm_ls_remote_index_tab node std "$NVM_NODEJS_ORG_MIRROR" "$PATTERN"
|
|
}
|
|
|
|
nvm_ls_remote_iojs() {
|
|
nvm_ls_remote_index_tab iojs std "$NVM_IOJS_ORG_MIRROR" "$1"
|
|
}
|
|
|
|
nvm_ls_remote_index_tab() {
|
|
if [ "$#" -lt 4 ]; then
|
|
nvm_err 'not enough arguments'
|
|
return 5
|
|
fi
|
|
local TYPE
|
|
TYPE="$1"
|
|
local PREFIX
|
|
PREFIX=''
|
|
case "$TYPE-$2" in
|
|
iojs-std) PREFIX="$(nvm_iojs_prefix)-" ;;
|
|
node-std) PREFIX='' ;;
|
|
iojs-*)
|
|
nvm_err 'unknown type of io.js release'
|
|
return 4
|
|
;;
|
|
node-*)
|
|
nvm_err 'unknown type of node.js release'
|
|
return 4
|
|
;;
|
|
esac
|
|
local SORT_COMMAND
|
|
SORT_COMMAND='sort'
|
|
case "$TYPE" in
|
|
node) SORT_COMMAND='sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n' ;;
|
|
esac
|
|
local MIRROR
|
|
MIRROR="$3"
|
|
local PATTERN
|
|
PATTERN="$4"
|
|
local VERSIONS
|
|
if [ -n "$PATTERN" ]; then
|
|
if [ "_$TYPE" = "_iojs" ]; then
|
|
PATTERN="$(nvm_ensure_version_prefix "$(nvm_strip_iojs_prefix "$PATTERN")")"
|
|
else
|
|
PATTERN="$(nvm_ensure_version_prefix "$PATTERN")"
|
|
fi
|
|
else
|
|
PATTERN=".*"
|
|
fi
|
|
ZHS_HAS_SHWORDSPLIT_UNSET=1
|
|
if nvm_has "setopt"; then
|
|
ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | nvm_grep shwordsplit > /dev/null ; nvm_echo $?)
|
|
setopt shwordsplit
|
|
fi
|
|
VERSIONS="$(nvm_download -L -s "$MIRROR/index.tab" -o - \
|
|
| command sed "
|
|
1d;
|
|
s/^/$PREFIX/;
|
|
s/[[:blank:]].*//" \
|
|
| nvm_grep -w "$PATTERN" \
|
|
| $SORT_COMMAND)"
|
|
if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
|
|
unsetopt shwordsplit
|
|
fi
|
|
if [ -z "$VERSIONS" ]; then
|
|
nvm_echo 'N/A'
|
|
return 3
|
|
fi
|
|
nvm_echo "$VERSIONS"
|
|
}
|
|
|
|
nvm_checksum() {
|
|
local NVM_CHECKSUM
|
|
if [ -z "$3" ] || [ "$3" = "sha1" ]; then
|
|
if nvm_has "sha1sum" && ! nvm_is_alias "sha1sum"; then
|
|
NVM_CHECKSUM="$(command sha1sum "$1" | command awk '{print $1}')"
|
|
elif nvm_has "sha1" && ! nvm_is_alias "sha1"; then
|
|
NVM_CHECKSUM="$(command sha1 -q "$1")"
|
|
elif nvm_has "shasum" && ! nvm_is_alias "shasum"; then
|
|
NVM_CHECKSUM="$(shasum "$1" | command awk '{print $1}')"
|
|
else
|
|
nvm_err 'Unaliased sha1sum, sha1, or shasum not found.'
|
|
return 2
|
|
fi
|
|
else
|
|
if nvm_has "sha256sum" && ! nvm_is_alias "sha256sum"; then
|
|
NVM_CHECKSUM="$(sha256sum "$1" | command awk '{print $1}')"
|
|
elif nvm_has "shasum" && ! nvm_is_alias "shasum"; then
|
|
NVM_CHECKSUM="$(shasum -a 256 "$1" | command awk '{print $1}')"
|
|
elif nvm_has "sha256" && ! nvm_is_alias "sha256"; then
|
|
NVM_CHECKSUM="$(sha256 -q "$1" | command awk '{print $1}')"
|
|
elif nvm_has "gsha256sum" && ! nvm_is_alias "gsha256sum"; then
|
|
NVM_CHECKSUM="$(gsha256sum "$1" | command awk '{print $1}')"
|
|
elif nvm_has "openssl" && ! nvm_is_alias "openssl"; then
|
|
NVM_CHECKSUM="$(openssl dgst -sha256 "$1" | rev | command awk '{print $1}' | rev)"
|
|
elif nvm_has "libressl" && ! nvm_is_alias "libressl"; then
|
|
NVM_CHECKSUM="$(libressl dgst -sha256 "$1" | rev | command awk '{print $1}' | rev)"
|
|
elif nvm_has "bssl" && ! nvm_is_alias "bssl"; then
|
|
NVM_CHECKSUM="$(bssl sha256sum "$1" | command awk '{print $1}')"
|
|
else
|
|
nvm_err 'Unaliased sha256sum, shasum, sha256, gsha256sum, openssl, libressl, or bssl not found.'
|
|
nvm_err 'WARNING: Continuing *without checksum verification*'
|
|
return
|
|
fi
|
|
fi
|
|
|
|
if [ "_$NVM_CHECKSUM" = "_$2" ]; then
|
|
return
|
|
elif [ -z "$2" ]; then
|
|
nvm_echo 'Checksums empty' #missing in raspberry pi binary
|
|
return
|
|
else
|
|
nvm_err 'Checksums do not match.'
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
nvm_print_versions() {
|
|
local VERSION
|
|
local FORMAT
|
|
local NVM_CURRENT
|
|
NVM_CURRENT=$(nvm_ls_current)
|
|
local NVM_HAS_COLORS
|
|
if nvm_has_colors; then
|
|
NVM_HAS_COLORS=1
|
|
fi
|
|
nvm_echo "$1" | while read -r VERSION; do
|
|
FORMAT='%15s'
|
|
if [ "_$VERSION" = "_$NVM_CURRENT" ]; then
|
|
if [ "${NVM_HAS_COLORS-}" = '1' ]; then
|
|
FORMAT='\033[0;32m-> %12s\033[0m'
|
|
else
|
|
FORMAT='-> %12s *'
|
|
fi
|
|
elif [ "$VERSION" = "system" ]; then
|
|
if [ "${NVM_HAS_COLORS-}" = '1' ]; then
|
|
FORMAT='\033[0;33m%15s\033[0m'
|
|
fi
|
|
elif nvm_is_version_installed "$VERSION"; then
|
|
if [ "${NVM_HAS_COLORS-}" = '1' ]; then
|
|
FORMAT='\033[0;34m%15s\033[0m'
|
|
else
|
|
FORMAT='%15s *'
|
|
fi
|
|
fi
|
|
command printf -- "$FORMAT\n" "$VERSION"
|
|
done
|
|
}
|
|
|
|
nvm_validate_implicit_alias() {
|
|
local NVM_IOJS_PREFIX
|
|
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
|
|
local NVM_NODE_PREFIX
|
|
NVM_NODE_PREFIX="$(nvm_node_prefix)"
|
|
|
|
case "$1" in
|
|
"stable" | "unstable" | "$NVM_IOJS_PREFIX" | "$NVM_NODE_PREFIX" )
|
|
return
|
|
;;
|
|
*)
|
|
nvm_err "Only implicit aliases 'stable', 'unstable', '$NVM_IOJS_PREFIX', and '$NVM_NODE_PREFIX' are supported."
|
|
return 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
nvm_print_implicit_alias() {
|
|
if [ "_$1" != "_local" ] && [ "_$1" != "_remote" ]; then
|
|
nvm_err "nvm_print_implicit_alias must be specified with local or remote as the first argument."
|
|
return 1
|
|
fi
|
|
|
|
local NVM_IMPLICIT
|
|
NVM_IMPLICIT="$2"
|
|
if ! nvm_validate_implicit_alias "$NVM_IMPLICIT"; then
|
|
return 2
|
|
fi
|
|
|
|
local ZHS_HAS_SHWORDSPLIT_UNSET
|
|
|
|
local NVM_IOJS_PREFIX
|
|
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
|
|
local NVM_NODE_PREFIX
|
|
NVM_NODE_PREFIX="$(nvm_node_prefix)"
|
|
local NVM_COMMAND
|
|
local NVM_ADD_PREFIX_COMMAND
|
|
local LAST_TWO
|
|
case "$NVM_IMPLICIT" in
|
|
"$NVM_IOJS_PREFIX")
|
|
NVM_COMMAND="nvm_ls_remote_iojs"
|
|
NVM_ADD_PREFIX_COMMAND="nvm_add_iojs_prefix"
|
|
if [ "_$1" = "_local" ]; then
|
|
NVM_COMMAND="nvm_ls $NVM_IMPLICIT"
|
|
fi
|
|
|
|
ZHS_HAS_SHWORDSPLIT_UNSET=1
|
|
if nvm_has "setopt"; then
|
|
ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | nvm_grep shwordsplit > /dev/null ; nvm_echo $?)
|
|
setopt shwordsplit
|
|
fi
|
|
|
|
local NVM_IOJS_VERSION
|
|
local EXIT_CODE
|
|
NVM_IOJS_VERSION="$($NVM_COMMAND)"
|
|
EXIT_CODE="$?"
|
|
if [ "_$EXIT_CODE" = "_0" ]; then
|
|
NVM_IOJS_VERSION="$(nvm_echo "$NVM_IOJS_VERSION" | command sed "s/^$NVM_IMPLICIT-//" | nvm_grep -e '^v' | command cut -c2- | command cut -d . -f 1,2 | uniq | command tail -1)"
|
|
fi
|
|
|
|
if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
|
|
unsetopt shwordsplit
|
|
fi
|
|
|
|
if [ "_$NVM_IOJS_VERSION" = "_N/A" ]; then
|
|
nvm_echo 'N/A'
|
|
else
|
|
$NVM_ADD_PREFIX_COMMAND "$NVM_IOJS_VERSION"
|
|
fi
|
|
return $EXIT_CODE
|
|
;;
|
|
"$NVM_NODE_PREFIX")
|
|
nvm_echo 'stable'
|
|
return
|
|
;;
|
|
*)
|
|
NVM_COMMAND="nvm_ls_remote"
|
|
if [ "_$1" = "_local" ]; then
|
|
NVM_COMMAND="nvm_ls node"
|
|
fi
|
|
|
|
ZHS_HAS_SHWORDSPLIT_UNSET=1
|
|
if nvm_has "setopt"; then
|
|
ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | nvm_grep shwordsplit > /dev/null ; nvm_echo $?)
|
|
setopt shwordsplit
|
|
fi
|
|
|
|
LAST_TWO=$($NVM_COMMAND | nvm_grep -e '^v' | command cut -c2- | command cut -d . -f 1,2 | uniq)
|
|
|
|
if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
|
|
unsetopt shwordsplit
|
|
fi
|
|
;;
|
|
esac
|
|
local MINOR
|
|
local STABLE
|
|
local UNSTABLE
|
|
local MOD
|
|
local NORMALIZED_VERSION
|
|
|
|
ZHS_HAS_SHWORDSPLIT_UNSET=1
|
|
if nvm_has "setopt"; then
|
|
ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | nvm_grep shwordsplit > /dev/null ; nvm_echo $?)
|
|
setopt shwordsplit
|
|
fi
|
|
for MINOR in $LAST_TWO; do
|
|
NORMALIZED_VERSION="$(nvm_normalize_version "$MINOR")"
|
|
if [ "_0${NORMALIZED_VERSION#?}" != "_$NORMALIZED_VERSION" ]; then
|
|
STABLE="$MINOR"
|
|
else
|
|
MOD="$(awk 'BEGIN { print int(ARGV[1] / 1000000) % 2 ; exit(0) }' "$NORMALIZED_VERSION")"
|
|
if [ "$MOD" -eq 0 ]; then
|
|
STABLE="$MINOR"
|
|
elif [ "$MOD" -eq 1 ]; then
|
|
UNSTABLE="$MINOR"
|
|
fi
|
|
fi
|
|
done
|
|
if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
|
|
unsetopt shwordsplit
|
|
fi
|
|
|
|
if [ "_$2" = '_stable' ]; then
|
|
nvm_echo "${STABLE}"
|
|
elif [ "_$2" = '_unstable' ]; then
|
|
nvm_echo "${UNSTABLE}"
|
|
fi
|
|
}
|
|
|
|
nvm_get_os() {
|
|
local NVM_UNAME
|
|
NVM_UNAME="$(command uname -a)"
|
|
local NVM_OS
|
|
case "$NVM_UNAME" in
|
|
Linux\ *) NVM_OS=linux ;;
|
|
Darwin\ *) NVM_OS=darwin ;;
|
|
SunOS\ *) NVM_OS=sunos ;;
|
|
FreeBSD\ *) NVM_OS=freebsd ;;
|
|
esac
|
|
nvm_echo "${NVM_OS-}"
|
|
}
|
|
|
|
nvm_get_arch() {
|
|
local HOST_ARCH
|
|
local NVM_OS
|
|
local EXIT_CODE
|
|
|
|
NVM_OS="$(nvm_get_os)"
|
|
# If the OS is SunOS, first try to use pkgsrc to guess
|
|
# the most appropriate arch. If it's not available, use
|
|
# isainfo to get the instruction set supported by the
|
|
# kernel.
|
|
if [ "_$NVM_OS" = "_sunos" ]; then
|
|
HOST_ARCH=$(pkg_info -Q MACHINE_ARCH pkg_install)
|
|
EXIT_CODE=$?
|
|
if [ $EXIT_CODE -ne 0 ]; then
|
|
HOST_ARCH=$(isainfo -n)
|
|
fi
|
|
else
|
|
HOST_ARCH="$(command uname -m)"
|
|
fi
|
|
|
|
local NVM_ARCH
|
|
case "$HOST_ARCH" in
|
|
x86_64 | amd64) NVM_ARCH="x64" ;;
|
|
i*86) NVM_ARCH="x86" ;;
|
|
aarch64) NVM_ARCH="arm64" ;;
|
|
*) NVM_ARCH="$HOST_ARCH" ;;
|
|
esac
|
|
nvm_echo "${NVM_ARCH}"
|
|
}
|
|
|
|
nvm_get_minor_version() {
|
|
local VERSION
|
|
VERSION="$1"
|
|
|
|
if [ -z "$VERSION" ]; then
|
|
nvm_err 'a version is required'
|
|
return 1
|
|
fi
|
|
|
|
case "$VERSION" in
|
|
v | .* | *..* | v*[!.0123456789]* | [!v]*[!.0123456789]* | [!v0123456789]* | v[!0123456789]*)
|
|
nvm_err 'invalid version number'
|
|
return 2
|
|
;;
|
|
esac
|
|
|
|
local PREFIXED_VERSION
|
|
PREFIXED_VERSION="$(nvm_format_version "$VERSION")"
|
|
|
|
local MINOR
|
|
MINOR="$(nvm_echo "$PREFIXED_VERSION" | nvm_grep -e '^v' | command cut -c2- | command cut -d . -f 1,2)"
|
|
if [ -z "$MINOR" ]; then
|
|
nvm_err 'invalid version number! (please report this)'
|
|
return 3
|
|
fi
|
|
nvm_echo "${MINOR}"
|
|
}
|
|
|
|
nvm_ensure_default_set() {
|
|
local VERSION
|
|
VERSION="$1"
|
|
if [ -z "$VERSION" ]; then
|
|
nvm_err 'nvm_ensure_default_set: a version is required'
|
|
return 1
|
|
fi
|
|
if nvm_alias default >/dev/null 2>&1; then
|
|
# default already set
|
|
return 0
|
|
fi
|
|
local OUTPUT
|
|
OUTPUT="$(nvm alias default "$VERSION")"
|
|
local EXIT_CODE
|
|
EXIT_CODE="$?"
|
|
nvm_echo "Creating default alias: $OUTPUT"
|
|
return $EXIT_CODE
|
|
}
|
|
|
|
nvm_is_merged_node_version() {
|
|
nvm_version_greater_than_or_equal_to "$1" v4.0.0
|
|
}
|
|
|
|
nvm_install_merged_node_binary() {
|
|
local NVM_NODE_TYPE
|
|
NVM_NODE_TYPE="$1"
|
|
local MIRROR
|
|
if [ "_$NVM_NODE_TYPE" = "_std" ]; then
|
|
MIRROR="$NVM_NODEJS_ORG_MIRROR"
|
|
else
|
|
nvm_err 'unknown type of node.js release'
|
|
return 4
|
|
fi
|
|
local VERSION
|
|
VERSION="$2"
|
|
local REINSTALL_PACKAGES_FROM
|
|
REINSTALL_PACKAGES_FROM="$3"
|
|
|
|
if ! nvm_is_merged_node_version "$VERSION" || nvm_is_iojs_version "$VERSION"; then
|
|
nvm_err 'nvm_install_merged_node_binary requires a node version v4.0 or greater.'
|
|
return 10
|
|
fi
|
|
|
|
local VERSION_PATH
|
|
VERSION_PATH="$(nvm_version_path "$VERSION")"
|
|
local NVM_OS
|
|
NVM_OS="$(nvm_get_os)"
|
|
local t
|
|
local url
|
|
local sum
|
|
local NODE_PREFIX
|
|
local compression
|
|
compression="gz"
|
|
local tar_compression_flag
|
|
tar_compression_flag="x"
|
|
if nvm_supports_xz "$VERSION"; then
|
|
compression="xz"
|
|
tar_compression_flag="J"
|
|
fi
|
|
NODE_PREFIX="$(nvm_node_prefix)"
|
|
|
|
if [ -n "$NVM_OS" ]; then
|
|
t="$VERSION-$NVM_OS-$(nvm_get_arch)"
|
|
url="$MIRROR/$VERSION/$NODE_PREFIX-${t}.tar.${compression}"
|
|
sum="$(nvm_download -L -s "$MIRROR/$VERSION/SHASUMS256.txt" -o - | nvm_grep "${NODE_PREFIX}-${t}.tar.${compression}" | command awk '{print $1}')"
|
|
local tmpdir
|
|
tmpdir="$NVM_DIR/bin/node-${t}"
|
|
local tmptarball
|
|
tmptarball="$tmpdir/node-${t}.tar.${compression}"
|
|
local NVM_INSTALL_ERRORED
|
|
command mkdir -p "$tmpdir" && \
|
|
nvm_echo "Downloading $url..." && \
|
|
nvm_download -L -C - --progress-bar "$url" -o "$tmptarball" || \
|
|
NVM_INSTALL_ERRORED=true
|
|
if nvm_grep '404 Not Found' "$tmptarball" >/dev/null; then
|
|
NVM_INSTALL_ERRORED=true
|
|
nvm_err "HTTP 404 at URL $url";
|
|
fi
|
|
if (
|
|
[ "$NVM_INSTALL_ERRORED" != true ] && \
|
|
nvm_checksum "$tmptarball" "$sum" "sha256" && \
|
|
command tar -x${tar_compression_flag}f "$tmptarball" -C "$tmpdir" --strip-components 1 && \
|
|
command rm -f "$tmptarball" && \
|
|
command mkdir -p "$VERSION_PATH" && \
|
|
command mv "$tmpdir"/* "$VERSION_PATH"
|
|
); then
|
|
return 0
|
|
else
|
|
nvm_err 'Binary download failed, trying source.'
|
|
command rm -rf "$tmptarball" "$tmpdir"
|
|
return 1
|
|
fi
|
|
fi
|
|
return 2
|
|
}
|
|
|
|
nvm_install_iojs_binary() {
|
|
local NVM_IOJS_TYPE
|
|
NVM_IOJS_TYPE="$1"
|
|
local MIRROR
|
|
if [ "_$NVM_IOJS_TYPE" = "_std" ]; then
|
|
MIRROR="$NVM_IOJS_ORG_MIRROR"
|
|
else
|
|
nvm_err 'unknown type of io.js release'
|
|
return 4
|
|
fi
|
|
local PREFIXED_VERSION
|
|
PREFIXED_VERSION="$2"
|
|
local REINSTALL_PACKAGES_FROM
|
|
REINSTALL_PACKAGES_FROM="$3"
|
|
|
|
if ! nvm_is_iojs_version "$PREFIXED_VERSION"; then
|
|
nvm_err 'nvm_install_iojs_binary requires an iojs-prefixed version.'
|
|
return 10
|
|
fi
|
|
|
|
local VERSION
|
|
VERSION="$(nvm_strip_iojs_prefix "$PREFIXED_VERSION")"
|
|
local VERSION_PATH
|
|
VERSION_PATH="$(nvm_version_path "$PREFIXED_VERSION")"
|
|
local NVM_OS
|
|
NVM_OS="$(nvm_get_os)"
|
|
local t
|
|
local url
|
|
local sum
|
|
local compression
|
|
compression="gz"
|
|
local tar_compression_flag
|
|
tar_compression_flag="x"
|
|
if nvm_supports_xz "$VERSION"; then
|
|
compression="xz"
|
|
tar_compression_flag="J"
|
|
fi
|
|
|
|
if [ -n "$NVM_OS" ]; then
|
|
if nvm_binary_available "$VERSION"; then
|
|
t="$VERSION-$NVM_OS-$(nvm_get_arch)"
|
|
url="$MIRROR/$VERSION/$(nvm_iojs_prefix)-${t}.tar.${compression}"
|
|
sum="$(nvm_download -L -s "$MIRROR/$VERSION/SHASUMS256.txt" -o - | nvm_grep "$(nvm_iojs_prefix)-${t}.tar.${compression}" | command awk '{print $1}')"
|
|
local tmpdir
|
|
tmpdir="$NVM_DIR/bin/iojs-${t}"
|
|
local tmptarball
|
|
tmptarball="$tmpdir/iojs-${t}.tar.${compression}"
|
|
local NVM_INSTALL_ERRORED
|
|
command mkdir -p "$tmpdir" && \
|
|
nvm_echo "Downloading $url..." && \
|
|
nvm_download -L -C - --progress-bar "$url" -o "$tmptarball" || \
|
|
NVM_INSTALL_ERRORED=true
|
|
if nvm_grep '404 Not Found' "$tmptarball" >/dev/null; then
|
|
NVM_INSTALL_ERRORED=true
|
|
nvm_err "HTTP 404 at URL $url";
|
|
fi
|
|
if (
|
|
[ "$NVM_INSTALL_ERRORED" != true ] && \
|
|
nvm_checksum "$tmptarball" "$sum" "sha256" && \
|
|
command tar -x${tar_compression_flag}f "$tmptarball" -C "$tmpdir" --strip-components 1 && \
|
|
command rm -f "$tmptarball" && \
|
|
command mkdir -p "$VERSION_PATH" && \
|
|
command mv "$tmpdir"/* "$VERSION_PATH"
|
|
); then
|
|
return 0
|
|
else
|
|
nvm_err 'Binary download failed, trying source.'
|
|
command rm -rf "$tmptarball" "$tmpdir"
|
|
return 1
|
|
fi
|
|
fi
|
|
fi
|
|
return 2
|
|
}
|
|
|
|
nvm_install_node_binary() {
|
|
local VERSION
|
|
VERSION="$1"
|
|
local REINSTALL_PACKAGES_FROM
|
|
REINSTALL_PACKAGES_FROM="$2"
|
|
|
|
if nvm_is_iojs_version "$VERSION"; then
|
|
nvm_err 'nvm_install_node_binary does not allow an iojs-prefixed version.'
|
|
return 10
|
|
fi
|
|
|
|
local VERSION_PATH
|
|
VERSION_PATH="$(nvm_version_path "$VERSION")"
|
|
local NVM_OS
|
|
NVM_OS="$(nvm_get_os)"
|
|
local t
|
|
local url
|
|
local sum
|
|
|
|
if [ -n "$NVM_OS" ]; then
|
|
if nvm_binary_available "$VERSION"; then
|
|
local NVM_ARCH
|
|
NVM_ARCH="$(nvm_get_arch)"
|
|
if [ "_$NVM_ARCH" = '_armv6l' ] || [ "_$NVM_ARCH" = 'armv7l' ]; then
|
|
NVM_ARCH="arm-pi"
|
|
fi
|
|
t="$VERSION-$NVM_OS-$NVM_ARCH"
|
|
url="$NVM_NODEJS_ORG_MIRROR/$VERSION/node-${t}.tar.gz"
|
|
sum=$(nvm_download -L -s "$NVM_NODEJS_ORG_MIRROR/$VERSION/SHASUMS.txt" -o - | nvm_grep "node-${t}.tar.gz" | command awk '{print $1}')
|
|
local tmpdir
|
|
tmpdir="$NVM_DIR/bin/node-${t}"
|
|
local tmptarball
|
|
tmptarball="$tmpdir/node-${t}.tar.gz"
|
|
local NVM_INSTALL_ERRORED
|
|
command mkdir -p "$tmpdir" && \
|
|
nvm_download -L -C - --progress-bar "$url" -o "$tmptarball" || \
|
|
NVM_INSTALL_ERRORED=true
|
|
if nvm_grep '404 Not Found' "$tmptarball" >/dev/null; then
|
|
NVM_INSTALL_ERRORED=true
|
|
nvm_err "HTTP 404 at URL $url";
|
|
fi
|
|
if (
|
|
[ "$NVM_INSTALL_ERRORED" != true ] && \
|
|
nvm_checksum "$tmptarball" "$sum" && \
|
|
command tar -xzf "$tmptarball" -C "$tmpdir" --strip-components 1 && \
|
|
command rm -f "$tmptarball" && \
|
|
command mkdir -p "$VERSION_PATH" && \
|
|
command mv "$tmpdir"/* "$VERSION_PATH"
|
|
); then
|
|
return 0
|
|
else
|
|
nvm_err 'Binary download failed, trying source.'
|
|
command rm -rf "$tmptarball" "$tmpdir"
|
|
return 1
|
|
fi
|
|
fi
|
|
fi
|
|
return 2
|
|
}
|
|
|
|
nvm_get_make_jobs() {
|
|
if nvm_is_natural_num "${1-}"; then
|
|
NVM_MAKE_JOBS="$1"
|
|
nvm_echo "number of \`make\` jobs: $NVM_MAKE_JOBS"
|
|
return
|
|
elif [ -n "${1-}" ]; then
|
|
unset NVM_MAKE_JOBS
|
|
nvm_err "$1 is invalid for number of \`make\` jobs, must be a natural number"
|
|
fi
|
|
local NVM_OS
|
|
NVM_OS="$(nvm_get_os)"
|
|
local NVM_CPU_THREADS
|
|
if [ "_$NVM_OS" = "_linux" ]; then
|
|
NVM_CPU_THREADS="$(nvm_grep -c -E '^processor.+: [0-9]+' /proc/cpuinfo)"
|
|
elif [ "_$NVM_OS" = "_freebsd" ] || [ "_$NVM_OS" = "_darwin" ]; then
|
|
NVM_CPU_THREADS="$(sysctl -n hw.ncpu)"
|
|
elif [ "_$NVM_OS" = "_sunos" ]; then
|
|
NVM_CPU_THREADS="$(psrinfo | wc -l)"
|
|
fi
|
|
if ! nvm_is_natural_num "$NVM_CPU_THREADS" ; then
|
|
nvm_err 'Can not determine how many thread(s) we can use, set to only 1 now.'
|
|
nvm_err 'Please report an issue on GitHub to help us make it better and run it faster on your computer!'
|
|
NVM_MAKE_JOBS=1
|
|
else
|
|
nvm_echo "Detected that you have $NVM_CPU_THREADS CPU thread(s)"
|
|
if [ "$NVM_CPU_THREADS" -gt 2 ]; then
|
|
NVM_MAKE_JOBS=$((NVM_CPU_THREADS - 1))
|
|
nvm_echo "Set the number of jobs to $NVM_CPU_THREADS - 1 = $NVM_MAKE_JOBS jobs to speed up the build"
|
|
else
|
|
NVM_MAKE_JOBS=1
|
|
nvm_echo 'Number of CPU thread(s) less or equal to 2 will have only one job a time for `make`'
|
|
fi
|
|
fi
|
|
}
|
|
|
|
nvm_install_node_source() {
|
|
local VERSION
|
|
VERSION="$1"
|
|
local NVM_MAKE_JOBS
|
|
NVM_MAKE_JOBS="$2"
|
|
local ADDITIONAL_PARAMETERS
|
|
ADDITIONAL_PARAMETERS="$3"
|
|
|
|
local NVM_ARCH
|
|
NVM_ARCH="$(nvm_get_arch)"
|
|
if [ "_$NVM_ARCH" = '_armv6l' ] || [ "_$NVM_ARCH" = '_armv7l' ]; then
|
|
ADDITIONAL_PARAMETERS="--without-snapshot $ADDITIONAL_PARAMETERS"
|
|
fi
|
|
|
|
if [ -n "$ADDITIONAL_PARAMETERS" ]; then
|
|
nvm_echo "Additional options while compiling: $ADDITIONAL_PARAMETERS"
|
|
fi
|
|
|
|
local VERSION_PATH
|
|
VERSION_PATH="$(nvm_version_path "$VERSION")"
|
|
local NVM_OS
|
|
NVM_OS="$(nvm_get_os)"
|
|
|
|
local tarball
|
|
tarball=''
|
|
local sum
|
|
sum=''
|
|
local make
|
|
make='make'
|
|
if [ "_$NVM_OS" = "_freebsd" ]; then
|
|
make='gmake'
|
|
MAKE_CXX="CXX=c++"
|
|
fi
|
|
|
|
local tmpdir
|
|
tmpdir="$NVM_DIR/src"
|
|
local tmptarball
|
|
tmptarball="$tmpdir/node-$VERSION.tar.gz"
|
|
|
|
if [ "$(nvm_download -L -s -I "$NVM_NODEJS_ORG_MIRROR/$VERSION/node-$VERSION.tar.gz" -o - 2>&1 | nvm_grep '200 OK')" != '' ]; then
|
|
tarball="$NVM_NODEJS_ORG_MIRROR/$VERSION/node-$VERSION.tar.gz"
|
|
sum=$(nvm_download -L -s "$NVM_NODEJS_ORG_MIRROR/$VERSION/SHASUMS.txt" -o - | nvm_grep "node-${VERSION}.tar.gz" | command awk '{print $1}')
|
|
elif [ "$(nvm_download -L -s -I "$NVM_NODEJS_ORG_MIRROR/node-$VERSION.tar.gz" -o - | nvm_grep '200 OK')" != '' ]; then
|
|
tarball="$NVM_NODEJS_ORG_MIRROR/node-$VERSION.tar.gz"
|
|
fi
|
|
|
|
if (
|
|
[ -n "$tarball" ] && \
|
|
command mkdir -p "$tmpdir" && \
|
|
nvm_echo "Downloading $tarball..." && \
|
|
nvm_download -L --progress-bar "$tarball" -o "$tmptarball" && \
|
|
nvm_checksum "$tmptarball" "$sum" && \
|
|
command tar -xzf "$tmptarball" -C "$tmpdir" && \
|
|
cd "$tmpdir/node-$VERSION" && \
|
|
./configure --prefix="$VERSION_PATH" $ADDITIONAL_PARAMETERS && \
|
|
$make -j "$NVM_MAKE_JOBS" ${MAKE_CXX-} && \
|
|
command rm -f "$VERSION_PATH" 2>/dev/null && \
|
|
$make -j "$NVM_MAKE_JOBS" ${MAKE_CXX-} install
|
|
)
|
|
then
|
|
if ! nvm_has "npm" ; then
|
|
nvm_echo 'Installing npm...'
|
|
if nvm_version_greater 0.2.0 "$VERSION"; then
|
|
nvm_err 'npm requires node v0.2.3 or higher'
|
|
elif nvm_version_greater_than_or_equal_to "$VERSION" 0.2.0; then
|
|
if nvm_version_greater 0.2.3 "$VERSION"; then
|
|
nvm_err 'npm requires node v0.2.3 or higher'
|
|
else
|
|
nvm_download -L https://npmjs.org/install.sh -o - | clean=yes npm_install=0.2.19 sh
|
|
fi
|
|
else
|
|
nvm_download -L https://npmjs.org/install.sh -o - | clean=yes sh
|
|
fi
|
|
fi
|
|
else
|
|
nvm_err "nvm: install $VERSION failed!"
|
|
return 1
|
|
fi
|
|
|
|
return $?
|
|
}
|
|
|
|
nvm_match_version() {
|
|
local NVM_IOJS_PREFIX
|
|
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
|
|
local PROVIDED_VERSION
|
|
PROVIDED_VERSION="$1"
|
|
case "_$PROVIDED_VERSION" in
|
|
"_$NVM_IOJS_PREFIX" | '_io.js')
|
|
nvm_version "$NVM_IOJS_PREFIX"
|
|
;;
|
|
'_system')
|
|
nvm_echo 'system'
|
|
;;
|
|
*)
|
|
nvm_version "$PROVIDED_VERSION"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
nvm_npm_global_modules() {
|
|
local NPMLIST
|
|
local VERSION
|
|
VERSION="$1"
|
|
if [ "_$VERSION" = "_system" ]; then
|
|
NPMLIST=$(nvm use system > /dev/null && npm list -g --depth=0 2> /dev/null | command tail -n +2)
|
|
else
|
|
NPMLIST=$(nvm use "$VERSION" > /dev/null && npm list -g --depth=0 2> /dev/null | command tail -n +2)
|
|
fi
|
|
|
|
local INSTALLS
|
|
INSTALLS=$(nvm_echo "$NPMLIST" | command sed -e '/ -> / d' -e '/\(empty\)/ d' -e 's/^.* \(.*@[^ ]*\).*/\1/' -e '/^npm@[^ ]*.*$/ d' | command xargs)
|
|
|
|
local LINKS
|
|
LINKS="$(nvm_echo "$NPMLIST" | command sed -n 's/.* -> \(.*\)/\1/ p')"
|
|
|
|
nvm_echo "$INSTALLS //// $LINKS"
|
|
}
|
|
|
|
nvm_die_on_prefix() {
|
|
local NVM_DELETE_PREFIX
|
|
NVM_DELETE_PREFIX="$1"
|
|
case "$NVM_DELETE_PREFIX" in
|
|
0|1) ;;
|
|
*)
|
|
nvm_err 'First argument "delete the prefix" must be zero or one'
|
|
return 1
|
|
;;
|
|
esac
|
|
local NVM_COMMAND
|
|
NVM_COMMAND="$2"
|
|
if [ -z "$NVM_COMMAND" ]; then
|
|
nvm_err 'Second argument "nvm command" must be nonempty'
|
|
return 2
|
|
fi
|
|
|
|
if [ -n "${PREFIX-}" ] && ! (nvm_tree_contains_path "$NVM_DIR" "$PREFIX" >/dev/null 2>&1); then
|
|
nvm deactivate >/dev/null 2>&1
|
|
nvm_err "nvm is not compatible with the \"PREFIX\" environment variable: currently set to \"$PREFIX\""
|
|
nvm_err 'Run `unset PREFIX` to unset it.'
|
|
return 3
|
|
fi
|
|
|
|
if [ -n "${NPM_CONFIG_PREFIX-}" ] && ! (nvm_tree_contains_path "$NVM_DIR" "$NPM_CONFIG_PREFIX" >/dev/null 2>&1); then
|
|
nvm deactivate >/dev/null 2>&1
|
|
nvm_err "nvm is not compatible with the \"NPM_CONFIG_PREFIX\" environment variable: currently set to \"$NPM_CONFIG_PREFIX\""
|
|
nvm_err 'Run `unset NPM_CONFIG_PREFIX` to unset it.'
|
|
return 4
|
|
fi
|
|
|
|
if ! nvm_has 'npm'; then
|
|
return
|
|
fi
|
|
|
|
local NVM_NPM_PREFIX
|
|
NVM_NPM_PREFIX="$(NPM_CONFIG_LOGLEVEL=warn npm config get prefix)"
|
|
if ! (nvm_tree_contains_path "$NVM_DIR" "$NVM_NPM_PREFIX" >/dev/null 2>&1); then
|
|
if [ "_$NVM_DELETE_PREFIX" = "_1" ]; then
|
|
NPM_CONFIG_LOGLEVEL=warn npm config delete prefix
|
|
else
|
|
nvm deactivate >/dev/null 2>&1
|
|
nvm_err "nvm is not compatible with the npm config \"prefix\" option: currently set to \"$NVM_NPM_PREFIX\""
|
|
if nvm_has 'npm'; then
|
|
nvm_err "Run \`npm config delete prefix\` or \`$NVM_COMMAND\` to unset it."
|
|
else
|
|
nvm_err "Run \`$NVM_COMMAND\` to unset it."
|
|
fi
|
|
return 10
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Succeeds if $IOJS_VERSION represents an io.js version that has a
|
|
# Solaris binary, fails otherwise.
|
|
# Currently, only io.js 3.3.1 has a Solaris binary available, and it's the
|
|
# latest io.js version available. The expectation is that any potential io.js
|
|
# version later than v3.3.1 will also have Solaris binaries.
|
|
iojs_version_has_solaris_binary() {
|
|
local IOJS_VERSION
|
|
IOJS_VERSION="$1"
|
|
local STRIPPED_IOJS_VERSION
|
|
STRIPPED_IOJS_VERSION="$(nvm_strip_iojs_prefix "$IOJS_VERSION")"
|
|
if [ "_$STRIPPED_IOJS_VERSION" = "$IOJS_VERSION" ]; then
|
|
return 1
|
|
fi
|
|
|
|
# io.js started shipping Solaris binaries with io.js v3.3.1
|
|
nvm_version_greater_than_or_equal_to "$STRIPPED_IOJS_VERSION" v3.3.1
|
|
}
|
|
|
|
# Succeeds if $NODE_VERSION represents a node version that has a
|
|
# Solaris binary, fails otherwise.
|
|
# Currently, node versions starting from v0.8.6 have a Solaris binary
|
|
# avaliable.
|
|
node_version_has_solaris_binary() {
|
|
local NODE_VERSION
|
|
NODE_VERSION="$1"
|
|
# Error out if $NODE_VERSION is actually an io.js version
|
|
local STRIPPED_IOJS_VERSION
|
|
STRIPPED_IOJS_VERSION="$(nvm_strip_iojs_prefix "$NODE_VERSION")"
|
|
if [ "_$STRIPPED_IOJS_VERSION" != "_$NODE_VERSION" ]; then
|
|
return 1
|
|
fi
|
|
|
|
# node (unmerged) started shipping Solaris binaries with v0.8.6 and
|
|
# node versions v1.0.0 or greater are not considered valid "unmerged" node
|
|
# versions.
|
|
nvm_version_greater_than_or_equal_to "$NODE_VERSION" v0.8.6 &&
|
|
! nvm_version_greater_than_or_equal_to "$NODE_VERSION" v1.0.0
|
|
}
|
|
|
|
# Succeeds if $VERSION represents a version (node, io.js or merged) that has a
|
|
# Solaris binary, fails otherwise.
|
|
nvm_has_solaris_binary() {
|
|
local VERSION=$1
|
|
if nvm_is_merged_node_version "$VERSION"; then
|
|
return 0 # All merged node versions have a Solaris binary
|
|
elif nvm_is_iojs_version "$VERSION"; then
|
|
iojs_version_has_solaris_binary "$VERSION"
|
|
else
|
|
node_version_has_solaris_binary "$VERSION"
|
|
fi
|
|
}
|
|
|
|
nvm_sanitize_path() {
|
|
local SANITIZED_PATH
|
|
SANITIZED_PATH="${1-}"
|
|
if [ "_$SANITIZED_PATH" != "_$NVM_DIR" ]; then
|
|
SANITIZED_PATH="$(nvm_echo "$SANITIZED_PATH" | command sed -e "s#$NVM_DIR#\$NVM_DIR#g")"
|
|
fi
|
|
if [ "_$SANITIZED_PATH" != "_$HOME" ]; then
|
|
SANITIZED_PATH="$(nvm_echo "$SANITIZED_PATH" | command sed -e "s#$HOME#\$HOME#g")"
|
|
fi
|
|
nvm_echo "$SANITIZED_PATH"
|
|
}
|
|
|
|
nvm_is_natural_num() {
|
|
if [ -z "$1" ]; then
|
|
return 4
|
|
fi
|
|
case "$1" in
|
|
0) return 1 ;;
|
|
-*) return 3 ;; # some BSDs return false positives for double-negated args
|
|
*)
|
|
[ "$1" -eq "$1" ] 2> /dev/null # returns 2 if it doesn't match
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Check version dir permissions
|
|
nvm_check_file_permissions() {
|
|
for FILE in $1/* $1/.[!.]* $1/..?* ; do
|
|
if [ -d "$FILE" ]; then
|
|
if ! nvm_check_file_permissions "$FILE"; then
|
|
return 2
|
|
fi
|
|
elif [ -e "$FILE" ] && [ ! -w "$FILE" ]; then
|
|
nvm_err "file is not writable: $(nvm_sanitize_path "$FILE")"
|
|
return 1
|
|
fi
|
|
done
|
|
return 0
|
|
}
|
|
|
|
nvm() {
|
|
if [ $# -lt 1 ]; then
|
|
nvm --help
|
|
return
|
|
fi
|
|
|
|
# initialize local variables
|
|
local VERSION
|
|
local ADDITIONAL_PARAMETERS
|
|
|
|
case $1 in
|
|
'help' | '--help' )
|
|
local NVM_IOJS_PREFIX
|
|
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
|
|
local NVM_NODE_PREFIX
|
|
NVM_NODE_PREFIX="$(nvm_node_prefix)"
|
|
nvm_echo
|
|
nvm_echo "Node Version Manager"
|
|
nvm_echo
|
|
nvm_echo 'Note: <version> refers to any version-like string nvm understands. This includes:'
|
|
nvm_echo ' - full or partial version numbers, starting with an optional "v" (0.10, v0.1.2, v1)'
|
|
nvm_echo " - default (built-in) aliases: $NVM_NODE_PREFIX, stable, unstable, $NVM_IOJS_PREFIX, system"
|
|
nvm_echo ' - custom aliases you define with `nvm alias foo`'
|
|
nvm_echo
|
|
nvm_echo 'Usage:'
|
|
nvm_echo ' nvm --help Show this message'
|
|
nvm_echo ' nvm --version Print out the latest released version of nvm'
|
|
nvm_echo ' nvm install [-s] <version> Download and install a <version>, [-s] from source. Uses .nvmrc if available'
|
|
nvm_echo ' --reinstall-packages-from=<version> When installing, reinstall packages installed in <node|iojs|node version number>'
|
|
nvm_echo ' nvm uninstall <version> Uninstall a version'
|
|
nvm_echo ' nvm use [--silent] <version> Modify PATH to use <version>. Uses .nvmrc if available'
|
|
nvm_echo ' nvm exec [--silent] <version> [<command>] Run <command> on <version>. Uses .nvmrc if available'
|
|
nvm_echo ' nvm run [--silent] <version> [<args>] Run `node` on <version> with <args> as arguments. Uses .nvmrc if available'
|
|
nvm_echo ' nvm current Display currently activated version'
|
|
nvm_echo ' nvm ls List installed versions'
|
|
nvm_echo ' nvm ls <version> List versions matching a given description'
|
|
nvm_echo ' nvm ls-remote List remote versions available for install'
|
|
nvm_echo ' nvm ls-remote <version> List remote versions available for install, matching a given <version>'
|
|
nvm_echo ' nvm version <version> Resolve the given description to a single local version'
|
|
nvm_echo ' nvm version-remote <version> Resolve the given description to a single remote version'
|
|
nvm_echo ' nvm deactivate Undo effects of `nvm` on current shell'
|
|
nvm_echo ' nvm alias [<pattern>] Show all aliases beginning with <pattern>'
|
|
nvm_echo ' nvm alias <name> <version> Set an alias named <name> pointing to <version>'
|
|
nvm_echo ' nvm unalias <name> Deletes the alias named <name>'
|
|
nvm_echo ' nvm reinstall-packages <version> Reinstall global `npm` packages contained in <version> to current version'
|
|
nvm_echo ' nvm unload Unload `nvm` from shell'
|
|
nvm_echo ' nvm which [<version>] Display path to installed node version. Uses .nvmrc if available'
|
|
nvm_echo
|
|
nvm_echo 'Example:'
|
|
nvm_echo ' nvm install v0.10.32 Install a specific version number'
|
|
nvm_echo ' nvm use 0.10 Use the latest available 0.10.x release'
|
|
nvm_echo ' nvm run 0.10.32 app.js Run app.js using node v0.10.32'
|
|
nvm_echo ' nvm exec 0.10.32 node app.js Run `node app.js` with the PATH pointing to node v0.10.32'
|
|
nvm_echo ' nvm alias default 0.10.32 Set default node version on a shell'
|
|
nvm_echo
|
|
nvm_echo 'Note:'
|
|
nvm_echo ' to remove, delete, or uninstall nvm - just remove the `$NVM_DIR` folder (usually `~/.nvm`)'
|
|
nvm_echo
|
|
;;
|
|
|
|
"debug" )
|
|
local ZHS_HAS_SHWORDSPLIT_UNSET
|
|
ZHS_HAS_SHWORDSPLIT_UNSET=1
|
|
if nvm_has "setopt"; then
|
|
ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | nvm_grep shwordsplit > /dev/null ; nvm_echo $?)
|
|
setopt shwordsplit
|
|
fi
|
|
nvm_err "nvm --version: v$(nvm --version)"
|
|
nvm_err "\$SHELL: $SHELL"
|
|
nvm_err "\$HOME: $HOME"
|
|
nvm_err "\$NVM_DIR: '$(nvm_sanitize_path "$NVM_DIR")'"
|
|
nvm_err "\$PREFIX: '$(nvm_sanitize_path "$PREFIX")'"
|
|
nvm_err "\$NPM_CONFIG_PREFIX: '$(nvm_sanitize_path "$NPM_CONFIG_PREFIX")'"
|
|
local NVM_DEBUG_OUTPUT
|
|
for NVM_DEBUG_COMMAND in 'nvm current' 'which node' 'which iojs' 'which npm' 'npm config get prefix' 'npm root -g'
|
|
do
|
|
NVM_DEBUG_OUTPUT="$($NVM_DEBUG_COMMAND 2>&1)"
|
|
nvm_err "$NVM_DEBUG_COMMAND: $(nvm_sanitize_path "$NVM_DEBUG_OUTPUT")"
|
|
done
|
|
if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
|
|
unsetopt shwordsplit
|
|
fi
|
|
return 42
|
|
;;
|
|
|
|
"install" | "i" )
|
|
local version_not_provided
|
|
version_not_provided=0
|
|
local NVM_OS
|
|
NVM_OS="$(nvm_get_os)"
|
|
|
|
if ! nvm_has "curl" && ! nvm_has "wget"; then
|
|
nvm_err 'nvm needs curl or wget to proceed.'
|
|
return 1
|
|
fi
|
|
|
|
if [ $# -lt 2 ]; then
|
|
version_not_provided=1
|
|
nvm_rc_version
|
|
if [ -z "$NVM_RC_VERSION" ]; then
|
|
>&2 nvm --help
|
|
return 127
|
|
fi
|
|
fi
|
|
|
|
shift
|
|
|
|
local nobinary
|
|
nobinary=0
|
|
while [ $# -ne 0 ]
|
|
do
|
|
case "$1" in
|
|
-s)
|
|
shift # consume "-s"
|
|
nobinary=1
|
|
;;
|
|
-j)
|
|
shift # consume "-j"
|
|
nvm_get_make_jobs "$1"
|
|
shift # consume job count
|
|
;;
|
|
*)
|
|
break # stop parsing args
|
|
;;
|
|
esac
|
|
done
|
|
|
|
local provided_version
|
|
provided_version="$1"
|
|
|
|
if [ -z "$provided_version" ]; then
|
|
if [ $version_not_provided -ne 1 ]; then
|
|
nvm_rc_version
|
|
fi
|
|
provided_version="$NVM_RC_VERSION"
|
|
else
|
|
shift
|
|
fi
|
|
|
|
VERSION="$(nvm_remote_version "$provided_version")"
|
|
|
|
if [ "_$VERSION" = "_N/A" ]; then
|
|
nvm_err "Version '$provided_version' not found - try \`nvm ls-remote\` to browse available versions."
|
|
return 3
|
|
fi
|
|
|
|
ADDITIONAL_PARAMETERS=''
|
|
local PROVIDED_REINSTALL_PACKAGES_FROM
|
|
local REINSTALL_PACKAGES_FROM
|
|
|
|
while [ $# -ne 0 ]
|
|
do
|
|
case "$1" in
|
|
--reinstall-packages-from=*)
|
|
PROVIDED_REINSTALL_PACKAGES_FROM="$(nvm_echo "$1" | command cut -c 27-)"
|
|
REINSTALL_PACKAGES_FROM="$(nvm_version "$PROVIDED_REINSTALL_PACKAGES_FROM" || return 0)"
|
|
;;
|
|
--copy-packages-from=*)
|
|
PROVIDED_REINSTALL_PACKAGES_FROM="$(nvm_echo "$1" | command cut -c 22-)"
|
|
REINSTALL_PACKAGES_FROM="$(nvm_version "$PROVIDED_REINSTALL_PACKAGES_FROM" || return 0)"
|
|
;;
|
|
*)
|
|
ADDITIONAL_PARAMETERS="$ADDITIONAL_PARAMETERS $1"
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ "_$(nvm_ensure_version_prefix "$PROVIDED_REINSTALL_PACKAGES_FROM")" = "_$VERSION" ]; then
|
|
nvm_err "You can't reinstall global packages from the same version of node you're installing."
|
|
return 4
|
|
elif [ ! -z "$PROVIDED_REINSTALL_PACKAGES_FROM" ] && [ "_$REINSTALL_PACKAGES_FROM" = "_N/A" ]; then
|
|
nvm_err "If --reinstall-packages-from is provided, it must point to an installed version of node."
|
|
return 5
|
|
fi
|
|
|
|
local NVM_NODE_MERGED
|
|
local NVM_IOJS
|
|
if nvm_is_iojs_version "$VERSION"; then
|
|
NVM_IOJS=true
|
|
elif nvm_is_merged_node_version "$VERSION"; then
|
|
NVM_NODE_MERGED=true
|
|
fi
|
|
|
|
if nvm_is_version_installed "$VERSION"; then
|
|
nvm_err "$VERSION is already installed."
|
|
if nvm use "$VERSION" && [ ! -z "$REINSTALL_PACKAGES_FROM" ] && [ "_$REINSTALL_PACKAGES_FROM" != "_N/A" ]; then
|
|
nvm reinstall-packages "$REINSTALL_PACKAGES_FROM"
|
|
fi
|
|
nvm_ensure_default_set "$provided_version"
|
|
return $?
|
|
fi
|
|
|
|
if [ "_$NVM_OS" = "_freebsd" ]; then
|
|
# node.js and io.js do not have a FreeBSD binary
|
|
nobinary=1
|
|
nvm_err "Currently, there is no binary for $NVM_OS"
|
|
elif [ "_$NVM_OS" = "_sunos" ]; then
|
|
# Not all node/io.js versions have a Solaris binary
|
|
if ! nvm_has_solaris_binary "$VERSION"; then
|
|
nobinary=1
|
|
nvm_err "Currently, there is no binary of version $VERSION for $NVM_OS"
|
|
fi
|
|
fi
|
|
local NVM_INSTALL_SUCCESS
|
|
# skip binary install if "nobinary" option specified.
|
|
if [ $nobinary -ne 1 ] && nvm_binary_available "$VERSION"; then
|
|
if [ "$NVM_IOJS" = true ] && nvm_install_iojs_binary std "$VERSION" "$REINSTALL_PACKAGES_FROM"; then
|
|
NVM_INSTALL_SUCCESS=true
|
|
elif [ "$NVM_NODE_MERGED" = true ] && nvm_install_merged_node_binary std "$VERSION" "$REINSTALL_PACKAGES_FROM"; then
|
|
NVM_INSTALL_SUCCESS=true
|
|
elif [ "$NVM_IOJS" != true ] && nvm_install_node_binary "$VERSION" "$REINSTALL_PACKAGES_FROM"; then
|
|
NVM_INSTALL_SUCCESS=true
|
|
fi
|
|
fi
|
|
if [ "$NVM_INSTALL_SUCCESS" != true ]; then
|
|
if [ -z "${NVM_MAKE_JOBS-}" ]; then
|
|
nvm_get_make_jobs
|
|
fi
|
|
|
|
case "true" in
|
|
"$NVM_IOJS")
|
|
# nvm_install_iojs_source "$VERSION" "$NVM_MAKE_JOBS" "$ADDITIONAL_PARAMETERS"
|
|
nvm_err 'Installing iojs from source is not currently supported'
|
|
return 105
|
|
;;
|
|
"$NVM_NODE_MERGED")
|
|
# nvm_install_merged_node_source "$VERSION" "$NVM_MAKE_JOBS" "$ADDITIONAL_PARAMETERS"
|
|
nvm_err 'Installing node v1.0 and greater from source is not currently supported'
|
|
return 106
|
|
;;
|
|
*)
|
|
if nvm_install_node_source "$VERSION" "$NVM_MAKE_JOBS" "$ADDITIONAL_PARAMETERS"; then
|
|
NVM_INSTALL_SUCCESS=true
|
|
fi
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
if [ "$NVM_INSTALL_SUCCESS" = true ] && nvm use "$VERSION"; then
|
|
nvm_ensure_default_set "$provided_version"
|
|
if [ ! -z "$REINSTALL_PACKAGES_FROM" ] \
|
|
&& [ "_$REINSTALL_PACKAGES_FROM" != "_N/A" ]; then
|
|
nvm reinstall-packages "$REINSTALL_PACKAGES_FROM"
|
|
fi
|
|
fi
|
|
return $?
|
|
;;
|
|
"uninstall" )
|
|
if [ $# -ne 2 ]; then
|
|
>&2 nvm --help
|
|
return 127
|
|
fi
|
|
|
|
local PATTERN
|
|
PATTERN="$2"
|
|
case "_$PATTERN" in
|
|
"_$(nvm_iojs_prefix)" | "_$(nvm_iojs_prefix)-" \
|
|
| "_$(nvm_node_prefix)" | "_$(nvm_node_prefix)-")
|
|
VERSION="$(nvm_version "$PATTERN")"
|
|
;;
|
|
*)
|
|
VERSION="$(nvm_version "$PATTERN")"
|
|
;;
|
|
esac
|
|
if [ "_$VERSION" = "_$(nvm_ls_current)" ]; then
|
|
if nvm_is_iojs_version "$VERSION"; then
|
|
nvm_err "nvm: Cannot uninstall currently-active io.js version, $VERSION (inferred from $PATTERN)."
|
|
else
|
|
nvm_err "nvm: Cannot uninstall currently-active node version, $VERSION (inferred from $PATTERN)."
|
|
fi
|
|
return 1
|
|
fi
|
|
|
|
if ! nvm_is_version_installed "$VERSION"; then
|
|
nvm_err "$VERSION version is not installed..."
|
|
return;
|
|
fi
|
|
|
|
t="$VERSION-$(nvm_get_os)-$(nvm_get_arch)"
|
|
|
|
local NVM_PREFIX
|
|
local NVM_SUCCESS_MSG
|
|
if nvm_is_iojs_version "$VERSION"; then
|
|
NVM_PREFIX="$(nvm_iojs_prefix)"
|
|
NVM_SUCCESS_MSG="Uninstalled io.js $(nvm_strip_iojs_prefix "$VERSION")"
|
|
else
|
|
NVM_PREFIX="$(nvm_node_prefix)"
|
|
NVM_SUCCESS_MSG="Uninstalled node $VERSION"
|
|
fi
|
|
|
|
local VERSION_PATH
|
|
VERSION_PATH="$(nvm_version_path "$VERSION")"
|
|
if ! nvm_check_file_permissions "$VERSION_PATH"; then
|
|
nvm_err 'Cannot uninstall, incorrect permissions on installation folder.'
|
|
nvm_err 'This is usually caused by running `npm install -g` as root. Run the following commands as root to fix the permissions and then try again.'
|
|
nvm_err
|
|
nvm_err " chown -R $(whoami) \"$(nvm_sanitize_path "$VERSION_PATH")\""
|
|
nvm_err " chmod -R u+w \"$(nvm_sanitize_path "$VERSION_PATH")\""
|
|
return 1
|
|
fi
|
|
|
|
# Delete all files related to target version.
|
|
command rm -rf "$NVM_DIR/src/$NVM_PREFIX-$VERSION" \
|
|
"$NVM_DIR/src/$NVM_PREFIX-$VERSION.tar.*" \
|
|
"$NVM_DIR/bin/$NVM_PREFIX-${t}" \
|
|
"$NVM_DIR/bin/$NVM_PREFIX-${t}.tar.*" \
|
|
"$VERSION_PATH" 2>/dev/null
|
|
nvm_echo "$NVM_SUCCESS_MSG"
|
|
|
|
# rm any aliases that point to uninstalled version.
|
|
for ALIAS in $(nvm_grep -l "$VERSION" "$(nvm_alias_path)/*" 2>/dev/null)
|
|
do
|
|
nvm unalias "$(command basename "$ALIAS")"
|
|
done
|
|
;;
|
|
"deactivate" )
|
|
local NEWPATH
|
|
NEWPATH="$(nvm_strip_path "$PATH" "/bin")"
|
|
if [ "_$PATH" = "_$NEWPATH" ]; then
|
|
nvm_err "Could not find $NVM_DIR/*/bin in \$PATH"
|
|
else
|
|
export PATH="$NEWPATH"
|
|
hash -r
|
|
nvm_echo "$NVM_DIR/*/bin removed from \$PATH"
|
|
fi
|
|
|
|
if [ -n "${MANPATH-}" ]; then
|
|
NEWPATH="$(nvm_strip_path "$MANPATH" "/share/man")"
|
|
if [ "_$MANPATH" = "_$NEWPATH" ]; then
|
|
nvm_err "Could not find $NVM_DIR/*/share/man in \$MANPATH"
|
|
else
|
|
export MANPATH="$NEWPATH"
|
|
nvm_echo "$NVM_DIR/*/share/man removed from \$MANPATH"
|
|
fi
|
|
fi
|
|
|
|
if [ -n "${NODE_PATH-}" ]; then
|
|
NEWPATH="$(nvm_strip_path "$NODE_PATH" "/lib/node_modules")"
|
|
if [ "_$NODE_PATH" != "_$NEWPATH" ]; then
|
|
export NODE_PATH="$NEWPATH"
|
|
nvm_echo "$NVM_DIR/*/lib/node_modules removed from \$NODE_PATH"
|
|
fi
|
|
fi
|
|
unset NVM_BIN NVM_PATH
|
|
;;
|
|
"use" )
|
|
local PROVIDED_VERSION
|
|
local NVM_USE_SILENT
|
|
NVM_USE_SILENT=0
|
|
local NVM_DELETE_PREFIX
|
|
NVM_DELETE_PREFIX=0
|
|
|
|
shift # remove "use"
|
|
while [ $# -ne 0 ]
|
|
do
|
|
case "$1" in
|
|
--silent) NVM_USE_SILENT=1 ;;
|
|
--delete-prefix) NVM_DELETE_PREFIX=1 ;;
|
|
*)
|
|
if [ -n "$1" ]; then
|
|
PROVIDED_VERSION="$1"
|
|
fi
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ -z "$PROVIDED_VERSION" ]; then
|
|
nvm_rc_version
|
|
if [ -n "$NVM_RC_VERSION" ]; then
|
|
PROVIDED_VERSION="$NVM_RC_VERSION"
|
|
VERSION="$(nvm_version "$PROVIDED_VERSION")"
|
|
fi
|
|
else
|
|
VERSION="$(nvm_match_version "$PROVIDED_VERSION")"
|
|
fi
|
|
|
|
if [ -z "$VERSION" ]; then
|
|
>&2 nvm --help
|
|
return 127
|
|
fi
|
|
|
|
if [ "_$VERSION" = '_system' ]; then
|
|
if nvm_has_system_node && nvm deactivate >/dev/null 2>&1; then
|
|
if [ $NVM_USE_SILENT -ne 1 ]; then
|
|
nvm_echo "Now using system version of node: $(node -v 2>/dev/null)$(nvm_print_npm_version)"
|
|
fi
|
|
return
|
|
elif nvm_has_system_iojs && nvm deactivate >/dev/null 2>&1; then
|
|
if [ $NVM_USE_SILENT -ne 1 ]; then
|
|
nvm_echo "Now using system version of io.js: $(iojs --version 2>/dev/null)$(nvm_print_npm_version)"
|
|
fi
|
|
return
|
|
else
|
|
if [ $NVM_USE_SILENT -ne 1 ]; then
|
|
nvm_err 'System version of node not found.'
|
|
fi
|
|
return 127
|
|
fi
|
|
elif [ "_$VERSION" = "_∞" ]; then
|
|
if [ $NVM_USE_SILENT -ne 1 ]; then
|
|
nvm_err "The alias \"$PROVIDED_VERSION\" leads to an infinite loop. Aborting."
|
|
fi
|
|
return 8
|
|
fi
|
|
|
|
# This nvm_ensure_version_installed call can be a performance bottleneck
|
|
# on shell startup. Perhaps we can optimize it away or make it faster.
|
|
nvm_ensure_version_installed "$PROVIDED_VERSION"
|
|
EXIT_CODE=$?
|
|
if [ "$EXIT_CODE" != "0" ]; then
|
|
return $EXIT_CODE
|
|
fi
|
|
|
|
local NVM_VERSION_DIR
|
|
NVM_VERSION_DIR="$(nvm_version_path "$VERSION")"
|
|
|
|
# Strip other version from PATH
|
|
PATH="$(nvm_strip_path "$PATH" "/bin")"
|
|
# Prepend current version
|
|
PATH="$(nvm_prepend_path "$PATH" "$NVM_VERSION_DIR/bin")"
|
|
if nvm_has manpath; then
|
|
if [ -z "$MANPATH" ]; then
|
|
MANPATH=$(manpath)
|
|
fi
|
|
# Strip other version from MANPATH
|
|
MANPATH="$(nvm_strip_path "$MANPATH" "/share/man")"
|
|
# Prepend current version
|
|
MANPATH="$(nvm_prepend_path "$MANPATH" "$NVM_VERSION_DIR/share/man")"
|
|
export MANPATH
|
|
fi
|
|
export PATH
|
|
hash -r
|
|
export NVM_PATH="$NVM_VERSION_DIR/lib/node"
|
|
export NVM_BIN="$NVM_VERSION_DIR/bin"
|
|
if [ "${NVM_SYMLINK_CURRENT-}" = true ]; then
|
|
command rm -f "$NVM_DIR/current" && ln -s "$NVM_VERSION_DIR" "$NVM_DIR/current"
|
|
fi
|
|
local NVM_USE_OUTPUT
|
|
if [ $NVM_USE_SILENT -ne 1 ]; then
|
|
if nvm_is_iojs_version "$VERSION"; then
|
|
NVM_USE_OUTPUT="Now using io.js $(nvm_strip_iojs_prefix "$VERSION")$(nvm_print_npm_version)"
|
|
else
|
|
NVM_USE_OUTPUT="Now using node $VERSION$(nvm_print_npm_version)"
|
|
fi
|
|
fi
|
|
if [ "_$VERSION" != "_system" ]; then
|
|
local NVM_USE_CMD
|
|
NVM_USE_CMD="nvm use --delete-prefix"
|
|
if [ -n "$PROVIDED_VERSION" ]; then
|
|
NVM_USE_CMD="$NVM_USE_CMD $VERSION"
|
|
fi
|
|
if [ $NVM_USE_SILENT -eq 1 ]; then
|
|
NVM_USE_CMD="$NVM_USE_CMD --silent"
|
|
fi
|
|
if ! nvm_die_on_prefix "$NVM_DELETE_PREFIX" "$NVM_USE_CMD"; then
|
|
return 11
|
|
fi
|
|
fi
|
|
if [ -n "${NVM_USE_OUTPUT-}" ]; then
|
|
nvm_echo "$NVM_USE_OUTPUT"
|
|
fi
|
|
;;
|
|
"run" )
|
|
local provided_version
|
|
local has_checked_nvmrc
|
|
has_checked_nvmrc=0
|
|
# run given version of node
|
|
shift
|
|
|
|
local NVM_SILENT
|
|
while [ $# -gt 0 ]
|
|
do
|
|
case "$1" in
|
|
--silent) NVM_SILENT='--silent' ; shift ;;
|
|
*)
|
|
if [ -n "$1" ]; then
|
|
break
|
|
else
|
|
shift
|
|
fi
|
|
;; # stop processing arguments
|
|
esac
|
|
done
|
|
|
|
if [ $# -lt 1 ]; then
|
|
if [ -n "${NVM_SILENT-}" ]; then
|
|
nvm_rc_version >/dev/null 2>&1 && has_checked_nvmrc=1
|
|
else
|
|
nvm_rc_version && has_checked_nvmrc=1
|
|
fi
|
|
if [ -n "$NVM_RC_VERSION" ]; then
|
|
VERSION="$(nvm_version "$NVM_RC_VERSION" || return 0)"
|
|
else
|
|
VERSION='N/A'
|
|
fi
|
|
if [ $VERSION = "N/A" ]; then
|
|
>&2 nvm --help
|
|
return 127
|
|
fi
|
|
fi
|
|
|
|
provided_version="$1"
|
|
if [ -n "$provided_version" ]; then
|
|
VERSION="$(nvm_version "$provided_version" || return 0)"
|
|
if [ "_$VERSION" = "_N/A" ] && ! nvm_is_valid_version "$provided_version"; then
|
|
provided_version=''
|
|
if [ $has_checked_nvmrc -ne 1 ]; then
|
|
if [ -n "${NVM_SILENT-}" ]; then
|
|
nvm_rc_version >/dev/null 2>&1 && has_checked_nvmrc=1
|
|
else
|
|
nvm_rc_version && has_checked_nvmrc=1
|
|
fi
|
|
fi
|
|
VERSION="$(nvm_version "$NVM_RC_VERSION" || return 0)"
|
|
else
|
|
shift
|
|
fi
|
|
fi
|
|
|
|
local NVM_IOJS
|
|
if nvm_is_iojs_version "$VERSION"; then
|
|
NVM_IOJS=true
|
|
fi
|
|
|
|
local EXIT_CODE
|
|
|
|
local ZHS_HAS_SHWORDSPLIT_UNSET
|
|
ZHS_HAS_SHWORDSPLIT_UNSET=1
|
|
if nvm_has "setopt"; then
|
|
ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | nvm_grep shwordsplit > /dev/null ; nvm_echo $?)
|
|
setopt shwordsplit
|
|
fi
|
|
if [ "_$VERSION" = "_N/A" ]; then
|
|
nvm_ensure_version_installed "$provided_version"
|
|
elif [ "$NVM_IOJS" = true ]; then
|
|
nvm exec "${NVM_SILENT-}" "$VERSION" iojs "$@"
|
|
else
|
|
nvm exec "${NVM_SILENT-}" "$VERSION" node "$@"
|
|
fi
|
|
EXIT_CODE="$?"
|
|
if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
|
|
unsetopt shwordsplit
|
|
fi
|
|
return $EXIT_CODE
|
|
;;
|
|
"exec" )
|
|
shift
|
|
|
|
local NVM_SILENT
|
|
while [ $# -gt 0 ]
|
|
do
|
|
case "$1" in
|
|
--silent) NVM_SILENT='--silent' ; shift ;;
|
|
--) break ;;
|
|
--*)
|
|
nvm_err "Unsupported option \"$1\"."
|
|
return 55
|
|
;;
|
|
*)
|
|
if [ -n "$1" ]; then
|
|
break
|
|
else
|
|
shift
|
|
fi
|
|
;; # stop processing arguments
|
|
esac
|
|
done
|
|
|
|
local provided_version
|
|
provided_version="$1"
|
|
if [ -n "$provided_version" ]; then
|
|
VERSION="$(nvm_version "$provided_version" || return 0)"
|
|
if [ "_$VERSION" = "_N/A" ] && ! nvm_is_valid_version "$provided_version"; then
|
|
if [ -n "${NVM_SILENT-}" ]; then
|
|
nvm_rc_version >/dev/null 2>&1
|
|
else
|
|
nvm_rc_version
|
|
fi
|
|
provided_version="$NVM_RC_VERSION"
|
|
VERSION="$(nvm_version "$provided_version" || return 0)"
|
|
else
|
|
shift
|
|
fi
|
|
fi
|
|
|
|
nvm_ensure_version_installed "$provided_version"
|
|
EXIT_CODE=$?
|
|
if [ "$EXIT_CODE" != "0" ]; then
|
|
return $EXIT_CODE
|
|
fi
|
|
|
|
if [ -z "${NVM_SILENT-}" ]; then
|
|
if nvm_is_iojs_version "$VERSION"; then
|
|
nvm_echo "Running io.js $(nvm_strip_iojs_prefix "$VERSION")$(nvm use --silent "$VERSION" && nvm_print_npm_version)"
|
|
else
|
|
nvm_echo "Running node $VERSION$(nvm use --silent "$VERSION" && nvm_print_npm_version)"
|
|
fi
|
|
fi
|
|
NODE_VERSION="$VERSION" "$NVM_DIR/nvm-exec" "$@"
|
|
;;
|
|
"ls" | "list" )
|
|
local NVM_LS_OUTPUT
|
|
local NVM_LS_EXIT_CODE
|
|
NVM_LS_OUTPUT=$(nvm_ls "${2-}")
|
|
NVM_LS_EXIT_CODE=$?
|
|
nvm_print_versions "$NVM_LS_OUTPUT"
|
|
if [ $# -eq 1 ]; then
|
|
nvm alias
|
|
fi
|
|
return $NVM_LS_EXIT_CODE
|
|
;;
|
|
"ls-remote" | "list-remote" )
|
|
local PATTERN
|
|
PATTERN="${2-}"
|
|
local NVM_IOJS_PREFIX
|
|
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
|
|
local NVM_NODE_PREFIX
|
|
NVM_NODE_PREFIX="$(nvm_node_prefix)"
|
|
local NVM_FLAVOR
|
|
case "_$PATTERN" in
|
|
"_$NVM_IOJS_PREFIX" | "_$NVM_NODE_PREFIX" )
|
|
NVM_FLAVOR="$PATTERN"
|
|
PATTERN="$3"
|
|
;;
|
|
esac
|
|
|
|
local NVM_LS_REMOTE_EXIT_CODE
|
|
NVM_LS_REMOTE_EXIT_CODE=0
|
|
local NVM_LS_REMOTE_PRE_MERGED_OUTPUT
|
|
NVM_LS_REMOTE_PRE_MERGED_OUTPUT=''
|
|
local NVM_LS_REMOTE_POST_MERGED_OUTPUT
|
|
NVM_LS_REMOTE_POST_MERGED_OUTPUT=''
|
|
if [ "_$NVM_FLAVOR" != "_$NVM_IOJS_PREFIX" ]; then
|
|
local NVM_LS_REMOTE_OUTPUT
|
|
NVM_LS_REMOTE_OUTPUT=$(nvm_ls_remote "$PATTERN")
|
|
# split output into two
|
|
NVM_LS_REMOTE_PRE_MERGED_OUTPUT="${NVM_LS_REMOTE_OUTPUT%%v4\.0\.0*}"
|
|
NVM_LS_REMOTE_POST_MERGED_OUTPUT="${NVM_LS_REMOTE_OUTPUT#$NVM_LS_REMOTE_PRE_MERGED_OUTPUT}"
|
|
NVM_LS_REMOTE_EXIT_CODE=$?
|
|
fi
|
|
|
|
local NVM_LS_REMOTE_IOJS_EXIT_CODE
|
|
NVM_LS_REMOTE_IOJS_EXIT_CODE=0
|
|
local NVM_LS_REMOTE_IOJS_OUTPUT
|
|
NVM_LS_REMOTE_IOJS_OUTPUT=''
|
|
if [ "_$NVM_FLAVOR" != "_$NVM_NODE_PREFIX" ]; then
|
|
NVM_LS_REMOTE_IOJS_OUTPUT=$(nvm_ls_remote_iojs "$PATTERN")
|
|
NVM_LS_REMOTE_IOJS_EXIT_CODE=$?
|
|
fi
|
|
|
|
local NVM_OUTPUT
|
|
NVM_OUTPUT="$(nvm_echo "$NVM_LS_REMOTE_PRE_MERGED_OUTPUT
|
|
$NVM_LS_REMOTE_IOJS_OUTPUT
|
|
$NVM_LS_REMOTE_POST_MERGED_OUTPUT" | nvm_grep -v "N/A" | command sed '/^$/d')"
|
|
if [ -n "$NVM_OUTPUT" ]; then
|
|
nvm_print_versions "$NVM_OUTPUT"
|
|
return $NVM_LS_REMOTE_EXIT_CODE || $NVM_LS_REMOTE_IOJS_EXIT_CODE
|
|
else
|
|
nvm_print_versions "N/A"
|
|
return 3
|
|
fi
|
|
;;
|
|
"current" )
|
|
nvm_version current
|
|
;;
|
|
"which" )
|
|
local provided_version
|
|
provided_version="$2"
|
|
if [ $# -eq 1 ]; then
|
|
nvm_rc_version
|
|
if [ -n "$NVM_RC_VERSION" ]; then
|
|
provided_version="$NVM_RC_VERSION"
|
|
VERSION=$(nvm_version "$NVM_RC_VERSION" || return 0)
|
|
fi
|
|
elif [ "_$2" != '_system' ]; then
|
|
VERSION="$(nvm_version "$provided_version" || return 0)"
|
|
else
|
|
VERSION="$2"
|
|
fi
|
|
if [ -z "$VERSION" ]; then
|
|
>&2 nvm --help
|
|
return 127
|
|
fi
|
|
|
|
if [ "_$VERSION" = '_system' ]; then
|
|
if nvm_has_system_iojs >/dev/null 2>&1 || nvm_has_system_node >/dev/null 2>&1; then
|
|
local NVM_BIN
|
|
NVM_BIN="$(nvm use system >/dev/null 2>&1 && command which node)"
|
|
if [ -n "$NVM_BIN" ]; then
|
|
nvm_echo "$NVM_BIN"
|
|
return
|
|
else
|
|
return 1
|
|
fi
|
|
else
|
|
nvm_err 'System version of node not found.'
|
|
return 127
|
|
fi
|
|
elif [ "_$VERSION" = "_∞" ]; then
|
|
nvm_err "The alias \"$2\" leads to an infinite loop. Aborting."
|
|
return 8
|
|
fi
|
|
|
|
nvm_ensure_version_installed "$provided_version"
|
|
EXIT_CODE=$?
|
|
if [ "$EXIT_CODE" != "0" ]; then
|
|
return $EXIT_CODE
|
|
fi
|
|
local NVM_VERSION_DIR
|
|
NVM_VERSION_DIR="$(nvm_version_path "$VERSION")"
|
|
nvm_echo "$NVM_VERSION_DIR/bin/node"
|
|
;;
|
|
"alias" )
|
|
local NVM_ALIAS_DIR
|
|
NVM_ALIAS_DIR="$(nvm_alias_path)"
|
|
command mkdir -p "$NVM_ALIAS_DIR"
|
|
local NVM_CURRENT
|
|
NVM_CURRENT="$(nvm_ls_current)"
|
|
if [ $# -le 2 ]; then
|
|
local ALIAS_PATH
|
|
for ALIAS_PATH in "$NVM_ALIAS_DIR/${2-}"*; do
|
|
NVM_CURRENT="${NVM_CURRENT}" nvm_print_alias_path "$NVM_ALIAS_DIR" "$ALIAS_PATH"
|
|
done
|
|
|
|
local ALIAS
|
|
for ALIAS in "$(nvm_node_prefix)" "stable" "unstable" "$(nvm_iojs_prefix)"; do
|
|
if [ ! -f "$NVM_ALIAS_DIR/$ALIAS" ] && ([ $# -lt 2 ] || [ "~$ALIAS" = "~${2-}" ]); then
|
|
NVM_CURRENT="${NVM_CURRENT}" nvm_print_default_alias "$ALIAS"
|
|
fi
|
|
done
|
|
return
|
|
fi
|
|
if [ -z "${3-}" ]; then
|
|
nvm unalias "${2-}"
|
|
return $?
|
|
fi
|
|
if [ "${2#*\/}" != "${2-}" ]; then
|
|
nvm_err 'Aliases in subdirectories are not supported.'
|
|
return 1
|
|
fi
|
|
VERSION="$(nvm_version "${3-}" || return 0)"
|
|
if [ "$VERSION" = 'N/A' ]; then
|
|
nvm_err "! WARNING: Version '${3-}' does not exist."
|
|
fi
|
|
nvm_make_alias "${2-}" "${3-}"
|
|
NVM_CURRENT="${NVM_CURRENT-}" DEFAULT=false nvm_print_formatted_alias "${2-}" "${3-}" "$VERSION"
|
|
;;
|
|
"unalias" )
|
|
local NVM_ALIAS_DIR
|
|
NVM_ALIAS_DIR="$(nvm_alias_path)"
|
|
command mkdir -p "$NVM_ALIAS_DIR"
|
|
if [ $# -ne 2 ]; then
|
|
>&2 nvm --help
|
|
return 127
|
|
fi
|
|
if [ "${2#*\/}" != "${2-}" ]; then
|
|
nvm_err 'Aliases in subdirectories are not supported.'
|
|
return 1
|
|
fi
|
|
[ ! -f "$NVM_ALIAS_DIR/$2" ] && nvm_err "Alias $2 doesn't exist!" && return
|
|
local NVM_ALIAS_ORIGINAL
|
|
NVM_ALIAS_ORIGINAL="$(nvm_alias "$2")"
|
|
command rm -f "$NVM_ALIAS_DIR/$2"
|
|
nvm_echo "Deleted alias $2 - restore it with \`nvm alias \"$2\" \"$NVM_ALIAS_ORIGINAL\"\`"
|
|
;;
|
|
"reinstall-packages" | "copy-packages" )
|
|
if [ $# -ne 2 ]; then
|
|
>&2 nvm --help
|
|
return 127
|
|
fi
|
|
|
|
local PROVIDED_VERSION
|
|
PROVIDED_VERSION="$2"
|
|
|
|
if [ "$PROVIDED_VERSION" = "$(nvm_ls_current)" ] || [ "$(nvm_version "$PROVIDED_VERSION" || return 0)" = "$(nvm_ls_current)" ]; then
|
|
nvm_err 'Can not reinstall packages from the current version of node.'
|
|
return 2
|
|
fi
|
|
|
|
local VERSION
|
|
if [ "_$PROVIDED_VERSION" = "_system" ]; then
|
|
if ! nvm_has_system_node && ! nvm_has_system_iojs; then
|
|
nvm_err 'No system version of node or io.js detected.'
|
|
return 3
|
|
fi
|
|
VERSION="system"
|
|
else
|
|
VERSION="$(nvm_version "$PROVIDED_VERSION" || return 0)"
|
|
fi
|
|
|
|
local NPMLIST
|
|
NPMLIST="$(nvm_npm_global_modules "$VERSION")"
|
|
local INSTALLS
|
|
local LINKS
|
|
INSTALLS="${NPMLIST%% //// *}"
|
|
LINKS="${NPMLIST##* //// }"
|
|
|
|
nvm_echo "Reinstalling global packages from $VERSION..."
|
|
nvm_echo "$INSTALLS" | command xargs npm install -g --quiet
|
|
|
|
nvm_echo "Linking global packages from $VERSION..."
|
|
set -f; IFS='
|
|
' # necessary to turn off variable expansion except for newlines
|
|
for LINK in $LINKS; do
|
|
set +f; unset IFS # restore variable expansion
|
|
if [ -n "$LINK" ]; then
|
|
(cd "$LINK" && npm link)
|
|
fi
|
|
done
|
|
set +f; unset IFS # restore variable expansion in case $LINKS was empty
|
|
;;
|
|
"clear-cache" )
|
|
command rm -f "$NVM_DIR/v*" "$(nvm_version_dir)" 2>/dev/null
|
|
nvm_echo 'Cache cleared.'
|
|
;;
|
|
"version" )
|
|
nvm_version "$2"
|
|
;;
|
|
"version-remote" )
|
|
nvm_remote_version "$2"
|
|
;;
|
|
"--version" )
|
|
nvm_echo '0.31.2'
|
|
;;
|
|
"unload" )
|
|
unset -f nvm nvm_print_versions nvm_checksum \
|
|
nvm_iojs_prefix nvm_node_prefix \
|
|
nvm_add_iojs_prefix nvm_strip_iojs_prefix \
|
|
nvm_is_iojs_version nvm_is_alias \
|
|
nvm_ls_remote nvm_ls_remote_iojs nvm_ls_remote_index_tab \
|
|
nvm_ls nvm_remote_version nvm_remote_versions \
|
|
nvm_install_iojs_binary nvm_install_node_binary \
|
|
nvm_install_node_source nvm_check_file_permissions \
|
|
nvm_version nvm_rc_version nvm_match_version \
|
|
nvm_ensure_default_set nvm_get_arch nvm_get_os \
|
|
nvm_print_implicit_alias nvm_validate_implicit_alias \
|
|
nvm_resolve_alias nvm_ls_current nvm_alias \
|
|
nvm_binary_available nvm_prepend_path nvm_strip_path \
|
|
nvm_num_version_groups nvm_format_version nvm_ensure_version_prefix \
|
|
nvm_normalize_version nvm_is_valid_version \
|
|
nvm_ensure_version_installed \
|
|
nvm_version_path nvm_alias_path nvm_version_dir \
|
|
nvm_find_nvmrc nvm_find_up nvm_tree_contains_path \
|
|
nvm_version_greater nvm_version_greater_than_or_equal_to \
|
|
nvm_print_npm_version nvm_npm_global_modules \
|
|
nvm_has_system_node nvm_has_system_iojs \
|
|
nvm_download nvm_get_latest nvm_has nvm_get_latest \
|
|
nvm_supports_source_options nvm_auto nvm_supports_xz \
|
|
nvm_echo nvm_err nvm_grep \
|
|
nvm_has_colors nvm_process_parameters > /dev/null 2>&1
|
|
unset RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_DIR NVM_CD_FLAGS > /dev/null 2>&1
|
|
;;
|
|
* )
|
|
>&2 nvm --help
|
|
return 127
|
|
;;
|
|
esac
|
|
}
|
|
|
|
nvm_supports_source_options() {
|
|
# shellcheck disable=SC1091
|
|
[ "_$(echo '[ $# -gt 0 ] && echo $1' | . /dev/stdin yes 2> /dev/null)" = "_yes" ]
|
|
}
|
|
|
|
nvm_supports_xz() {
|
|
command which xz >/dev/null 2>&1 && nvm_version_greater_than_or_equal_to "$1" "2.3.2"
|
|
}
|
|
|
|
nvm_auto() {
|
|
local NVM_MODE
|
|
NVM_MODE="${1-}"
|
|
local VERSION
|
|
if [ "_$NVM_MODE" = '_install' ]; then
|
|
VERSION="$(nvm_alias default 2>/dev/null || nvm_echo)"
|
|
if [ -n "$VERSION" ]; then
|
|
nvm install "$VERSION" >/dev/null
|
|
elif nvm_rc_version >/dev/null 2>&1; then
|
|
nvm install >/dev/null
|
|
fi
|
|
elif [ "_$NVM_MODE" = '_use' ]; then
|
|
VERSION="$(nvm_alias default 2>/dev/null || nvm_echo)"
|
|
if [ -n "$VERSION" ]; then
|
|
nvm use --silent "$VERSION" >/dev/null
|
|
elif nvm_rc_version >/dev/null 2>&1; then
|
|
nvm use --silent >/dev/null
|
|
fi
|
|
elif [ "_$NVM_MODE" != '_none' ]; then
|
|
nvm_err 'Invalid auto mode supplied.'
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
nvm_process_parameters() {
|
|
local NVM_AUTO_MODE
|
|
NVM_AUTO_MODE='use'
|
|
if nvm_supports_source_options; then
|
|
while [ $# -ne 0 ]
|
|
do
|
|
case "$1" in
|
|
--install) NVM_AUTO_MODE='install' ;;
|
|
--no-use) NVM_AUTO_MODE='none' ;;
|
|
esac
|
|
shift
|
|
done
|
|
fi
|
|
nvm_auto "$NVM_AUTO_MODE"
|
|
}
|
|
|
|
nvm_process_parameters "$@"
|
|
|
|
} # this ensures the entire script is downloaded #
|