mirror of
https://github.com/nvm-sh/nvm.git
synced 2025-09-03 19:16:33 +00:00
Compare commits
24 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
8aebf86329 | ||
![]() |
39dad845cf | ||
![]() |
838d72688f | ||
![]() |
8ee6f30352 | ||
![]() |
1458de7293 | ||
![]() |
a1def71062 | ||
![]() |
eb81fba8f7 | ||
![]() |
7496a24bd6 | ||
![]() |
c64a0343af | ||
![]() |
643365a948 | ||
![]() |
6e894520ec | ||
![]() |
9e389eb9fe | ||
![]() |
151efc32f5 | ||
![]() |
bda1d2ec29 | ||
![]() |
e3528b0d9e | ||
![]() |
014a44e154 | ||
![]() |
c9215a127f | ||
![]() |
c92effc6da | ||
![]() |
1e2a7a8de4 | ||
![]() |
d4caf9fb67 | ||
![]() |
0ef20199dc | ||
![]() |
0d898b0aa4 | ||
![]() |
0181821b51 | ||
![]() |
f34fef96d8 |
@@ -15,11 +15,11 @@ Note: `nvm` does not support [Fish] either (see [#303](https://github.com/creati
|
||||
|
||||
To install you could use the [install script][2] using cURL:
|
||||
|
||||
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.26.1/install.sh | bash
|
||||
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.27.1/install.sh | bash
|
||||
|
||||
or Wget:
|
||||
|
||||
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.26.1/install.sh | bash
|
||||
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.27.1/install.sh | bash
|
||||
|
||||
<sub>The script clones the nvm repository to `~/.nvm` and adds the source line to your profile (`~/.bash_profile`, `~/.zshrc` or `~/.profile`).</sub>
|
||||
|
||||
@@ -236,7 +236,7 @@ After the v0.8.6 release of node, nvm tries to install from binary packages. But
|
||||
nvm install -s 0.8.6
|
||||
|
||||
[1]: https://github.com/creationix/nvm.git
|
||||
[2]: https://github.com/creationix/nvm/blob/v0.26.1/install.sh
|
||||
[2]: https://github.com/creationix/nvm/blob/v0.27.1/install.sh
|
||||
[3]: https://travis-ci.org/creationix/nvm
|
||||
[Urchin]: https://github.com/scraperwiki/urchin
|
||||
[Fish]: http://fishshell.com
|
||||
|
@@ -1,7 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
{ # this ensures the entire script is downloaded #
|
||||
|
||||
nvm_has() {
|
||||
@@ -13,7 +11,7 @@ if [ -z "$NVM_DIR" ]; then
|
||||
fi
|
||||
|
||||
nvm_latest_version() {
|
||||
echo "v0.26.1"
|
||||
echo "v0.27.1"
|
||||
}
|
||||
|
||||
#
|
||||
@@ -240,7 +238,7 @@ nvm_do_install() {
|
||||
printf "$SOURCE_STR"
|
||||
echo
|
||||
else
|
||||
if ! grep -qc 'nvm.sh' "$NVM_PROFILE"; then
|
||||
if ! command grep -qc '/nvm.sh' "$NVM_PROFILE"; then
|
||||
echo "=> Appending source string to $NVM_PROFILE"
|
||||
printf "$SOURCE_STR\n" >> "$NVM_PROFILE"
|
||||
else
|
||||
@@ -250,8 +248,7 @@ nvm_do_install() {
|
||||
|
||||
nvm_check_global_modules
|
||||
|
||||
. $NVM_DIR/nvm.sh
|
||||
echo "=> You can now start using nvm"
|
||||
echo "=> Close and reopen your terminal to start using nvm"
|
||||
nvm_reset
|
||||
}
|
||||
|
||||
|
291
nvm.sh
291
nvm.sh
@@ -210,7 +210,9 @@ nvm_ensure_version_installed() {
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "N/A: version \"$PROVIDED_VERSION -> $VERSION\" is not yet installed" >&2
|
||||
else
|
||||
echo "N/A: version \"$(nvm_ensure_version_prefix "$PROVIDED_VERSION")\" is not yet installed" >&2
|
||||
local PREFIXED_VERSION
|
||||
PREFIXED_VERSION="$(nvm_ensure_version_prefix "$PROVIDED_VERSION")"
|
||||
echo "N/A: version \"${PREFIXED_VERSION:-$PROVIDED_VERSION}\" is not yet installed" >&2
|
||||
fi
|
||||
return 1
|
||||
fi
|
||||
@@ -556,6 +558,9 @@ nvm_ls() {
|
||||
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
|
||||
@@ -814,15 +819,22 @@ nvm_print_implicit_alias() {
|
||||
fi
|
||||
|
||||
local NVM_IOJS_VERSION
|
||||
NVM_IOJS_VERSION="$($NVM_COMMAND | sed "s/^"$NVM_IMPLICIT"-//" | command grep -e '^v' | command cut -c2- | command cut -d . -f 1,2 | uniq | command tail -1)"
|
||||
local EXIT_CODE
|
||||
NVM_IOJS_VERSION="$($NVM_COMMAND)"
|
||||
EXIT_CODE="$?"
|
||||
if [ "_$EXIT_CODE" = "_0" ]; then
|
||||
NVM_IOJS_VERSION="$(echo "$NVM_IOJS_VERSION" | sed "s/^"$NVM_IMPLICIT"-//" | command 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
|
||||
|
||||
echo "$($NVM_ADD_PREFIX_COMMAND "$NVM_IOJS_VERSION")"
|
||||
if [ "_$NVM_IOJS_VERSION" = "_N/A" ]; then
|
||||
echo "N/A"
|
||||
else
|
||||
echo "$($NVM_ADD_PREFIX_COMMAND "$NVM_IOJS_VERSION")"
|
||||
fi
|
||||
return $EXIT_CODE
|
||||
;;
|
||||
"$NVM_NODE_PREFIX")
|
||||
@@ -927,6 +939,75 @@ nvm_ensure_default_set() {
|
||||
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
|
||||
echo "unknown type of node.js release" >&2
|
||||
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
|
||||
echo 'nvm_install_merged_node_binary requires a node version v4.0 or greater.' >&2
|
||||
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
|
||||
NODE_PREFIX="$(nvm_node_prefix)"
|
||||
|
||||
if [ -n "$NVM_OS" ]; then
|
||||
t="$VERSION-$NVM_OS-$(nvm_get_arch)"
|
||||
url="$MIRROR/$VERSION/$NODE_PREFIX-${t}.tar.gz"
|
||||
sum="$(nvm_download -L -s $MIRROR/$VERSION/SHASUMS256.txt -o - | command grep $NODE_PREFIX-${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 grep '404 Not Found' "$tmptarball" >/dev/null; then
|
||||
NVM_INSTALL_ERRORED=true
|
||||
echo >&2 "HTTP 404 at URL $url";
|
||||
fi
|
||||
if (
|
||||
[ "$NVM_INSTALL_ERRORED" != true ] && \
|
||||
echo "WARNING: checksums are currently disabled for node.js v4.0 and later" >&2 && \
|
||||
# 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
|
||||
echo >&2 "Binary download failed, trying source." >&2
|
||||
command rm -rf "$tmptarball" "$tmpdir"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
return 2
|
||||
}
|
||||
|
||||
nvm_install_iojs_binary() {
|
||||
local NVM_IOJS_TYPE
|
||||
NVM_IOJS_TYPE="$1"
|
||||
@@ -1169,6 +1250,59 @@ nvm_npm_global_modules() {
|
||||
echo "$INSTALLS //// $LINKS"
|
||||
}
|
||||
|
||||
nvm_die_on_prefix() {
|
||||
local NVM_DELETE_PREFIX
|
||||
NVM_DELETE_PREFIX="$1"
|
||||
case "$NVM_DELETE_PREFIX" in
|
||||
0|1) ;;
|
||||
*)
|
||||
echo >&2 'First argument "delete the prefix" must be zero or one'
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
local NVM_COMMAND
|
||||
NVM_COMMAND="$2"
|
||||
if [ -z "$NVM_COMMAND" ]; then
|
||||
echo >&2 '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
|
||||
echo >&2 "nvm is not compatible with the \"PREFIX\" environment variable: currently set to \"$PREFIX\""
|
||||
echo >&2 "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
|
||||
echo >&2 "nvm is not compatible with the \"NPM_CONFIG_PREFIX\" environment variable: currently set to \"$NPM_CONFIG_PREFIX\""
|
||||
echo >&2 "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 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 delete prefix
|
||||
else
|
||||
nvm deactivate >/dev/null 2>&1
|
||||
echo >&2 "nvm is not compatible with the npm config \"prefix\" option: currently set to \"$NVM_NPM_PREFIX\""
|
||||
if nvm_has 'npm'; then
|
||||
echo >&2 "Run \`npm config delete prefix\` or \`$NVM_COMMAND\` to unset it."
|
||||
else
|
||||
echo >&2 "Run \`$NVM_COMMAND\` to unset it."
|
||||
fi
|
||||
return 10
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
nvm() {
|
||||
if [ $# -lt 1 ]; then
|
||||
nvm help
|
||||
@@ -1198,26 +1332,27 @@ nvm() {
|
||||
echo ' - custom aliases you define with `nvm alias foo`'
|
||||
echo
|
||||
echo 'Usage:'
|
||||
echo ' nvm help Show this message'
|
||||
echo ' nvm --version Print out the latest released version of nvm'
|
||||
echo ' nvm install [-s] <version> Download and install a <version>, [-s] from source. Uses .nvmrc if available'
|
||||
echo ' --reinstall-packages-from=<version> When installing, reinstall packages installed in <node|iojs|node version number>'
|
||||
echo ' nvm uninstall <version> Uninstall a version'
|
||||
echo ' nvm use [--silent] <version> Modify PATH to use <version>. Uses .nvmrc if available'
|
||||
echo ' nvm run <version> [<args>] Run <version> with <args> as arguments. Uses .nvmrc if available for <version>'
|
||||
echo ' nvm current Display currently activated version'
|
||||
echo ' nvm ls List installed versions'
|
||||
echo ' nvm ls <version> List versions matching a given description'
|
||||
echo ' nvm ls-remote List remote versions available for install'
|
||||
echo ' nvm version <version> Resolve the given description to a single local version'
|
||||
echo ' nvm version-remote <version> Resolve the given description to a single remote version'
|
||||
echo ' nvm deactivate Undo effects of `nvm` on current shell'
|
||||
echo ' nvm alias [<pattern>] Show all aliases beginning with <pattern>'
|
||||
echo ' nvm alias <name> <version> Set an alias named <name> pointing to <version>'
|
||||
echo ' nvm unalias <name> Deletes the alias named <name>'
|
||||
echo ' nvm reinstall-packages <version> Reinstall global `npm` packages contained in <version> to current version'
|
||||
echo ' nvm unload Unload `nvm` from shell'
|
||||
echo ' nvm which [<version>] Display path to installed node version. Uses .nvmrc if available'
|
||||
echo ' nvm help Show this message'
|
||||
echo ' nvm --version Print out the latest released version of nvm'
|
||||
echo ' nvm install [-s] <version> Download and install a <version>, [-s] from source. Uses .nvmrc if available'
|
||||
echo ' --reinstall-packages-from=<version> When installing, reinstall packages installed in <node|iojs|node version number>'
|
||||
echo ' nvm uninstall <version> Uninstall a version'
|
||||
echo ' nvm use [--silent] <version> Modify PATH to use <version>. Uses .nvmrc if available'
|
||||
echo ' nvm exec [--silent] <version> [<command>] Run <command> on <version>. Uses .nvmrc if available'
|
||||
echo ' nvm run [--silent] <version> [<args>] Run `node` on <version> with <args> as arguments. Uses .nvmrc if available'
|
||||
echo ' nvm current Display currently activated version'
|
||||
echo ' nvm ls List installed versions'
|
||||
echo ' nvm ls <version> List versions matching a given description'
|
||||
echo ' nvm ls-remote List remote versions available for install'
|
||||
echo ' nvm version <version> Resolve the given description to a single local version'
|
||||
echo ' nvm version-remote <version> Resolve the given description to a single remote version'
|
||||
echo ' nvm deactivate Undo effects of `nvm` on current shell'
|
||||
echo ' nvm alias [<pattern>] Show all aliases beginning with <pattern>'
|
||||
echo ' nvm alias <name> <version> Set an alias named <name> pointing to <version>'
|
||||
echo ' nvm unalias <name> Deletes the alias named <name>'
|
||||
echo ' nvm reinstall-packages <version> Reinstall global `npm` packages contained in <version> to current version'
|
||||
echo ' nvm unload Unload `nvm` from shell'
|
||||
echo ' nvm which [<version>] Display path to installed node version. Uses .nvmrc if available'
|
||||
echo
|
||||
echo 'Example:'
|
||||
echo ' nvm install v0.10.32 Install a specific version number'
|
||||
@@ -1329,9 +1464,12 @@ nvm() {
|
||||
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
|
||||
|
||||
local VERSION_PATH
|
||||
@@ -1347,7 +1485,7 @@ nvm() {
|
||||
if [ "_$NVM_OS" = "_freebsd" ]; then
|
||||
# node.js and io.js do not have a FreeBSD binary
|
||||
nobinary=1
|
||||
elif [ "_$NVM_OS" = "_sunos" ] && [ "$NVM_IOJS" = true ]; then
|
||||
elif [ "_$NVM_OS" = "_sunos" ] && ([ "$NVM_IOJS" = true ] || [ "$NVM_NODE_MERGED" = true ]); then
|
||||
# io.js does not have a SunOS binary
|
||||
nobinary=1
|
||||
fi
|
||||
@@ -1356,17 +1494,25 @@ nvm() {
|
||||
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 [ "$NVM_IOJS" = true ]; then
|
||||
if [ "$NVM_IOJS" != true ] && [ "$NVM_NODE_MERGED" != true ]; then
|
||||
if nvm_install_node_source "$VERSION" "$ADDITIONAL_PARAMETERS"; then
|
||||
NVM_INSTALL_SUCCESS=true
|
||||
fi
|
||||
elif [ "$NVM_IOJS" = true ]; then
|
||||
# nvm_install_iojs_source "$VERSION" "$ADDITIONAL_PARAMETERS"
|
||||
echo "Installing iojs from source is not currently supported" >&2
|
||||
return 105
|
||||
elif nvm_install_node_source "$VERSION" "$ADDITIONAL_PARAMETERS"; then
|
||||
NVM_INSTALL_SUCCESS=true
|
||||
elif [ "$NVM_NODE_MERGED" = true ]; then
|
||||
# nvm_install_merged_node_source "$VERSION" "$ADDITIONAL_PARAMETERS"
|
||||
echo "Installing node v1.0 and greater from source is not currently supported" >&2
|
||||
return 106
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -1465,19 +1611,31 @@ nvm() {
|
||||
local PROVIDED_VERSION
|
||||
local NVM_USE_SILENT
|
||||
NVM_USE_SILENT=0
|
||||
if [ "$2" = '--silent' ]; then
|
||||
NVM_USE_SILENT=1
|
||||
shift
|
||||
fi
|
||||
local NVM_DELETE_PREFIX
|
||||
NVM_DELETE_PREFIX=0
|
||||
|
||||
if [ $# -eq 1 ]; then
|
||||
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
|
||||
PROVIDED_VERSION="$2"
|
||||
VERSION="$(nvm_match_version "$PROVIDED_VERSION")"
|
||||
fi
|
||||
|
||||
@@ -1551,6 +1709,19 @@ nvm() {
|
||||
echo "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
|
||||
;;
|
||||
"run" )
|
||||
local provided_version
|
||||
@@ -1558,6 +1729,14 @@ nvm() {
|
||||
has_checked_nvmrc=0
|
||||
# run given version of node
|
||||
shift
|
||||
|
||||
local NVM_SILENT
|
||||
NVM_SILENT=0
|
||||
if [ "_$1" = "_--silent" ]; then
|
||||
NVM_SILENT=1
|
||||
shift
|
||||
fi
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
nvm_rc_version && has_checked_nvmrc=1
|
||||
if [ -n "$NVM_RC_VERSION" ]; then
|
||||
@@ -1612,11 +1791,11 @@ nvm() {
|
||||
fi
|
||||
EXIT_CODE="$?"
|
||||
elif [ "$NVM_IOJS" = true ]; then
|
||||
echo "Running io.js $(nvm_strip_iojs_prefix "$VERSION")"
|
||||
[ $NVM_SILENT -eq 1 ] || echo "Running io.js $(nvm_strip_iojs_prefix "$VERSION")$(nvm_print_npm_version)"
|
||||
OUTPUT="$(nvm use "$VERSION" >/dev/null && iojs $ARGS)"
|
||||
EXIT_CODE="$?"
|
||||
else
|
||||
echo "Running node $VERSION"
|
||||
[ $NVM_SILENT -eq 1 ] || echo "Running node $VERSION$(nvm_print_npm_version)"
|
||||
OUTPUT="$(nvm use "$VERSION" >/dev/null && node $ARGS)"
|
||||
EXIT_CODE="$?"
|
||||
fi
|
||||
@@ -1631,6 +1810,13 @@ nvm() {
|
||||
"exec" )
|
||||
shift
|
||||
|
||||
local NVM_SILENT
|
||||
NVM_SILENT=0
|
||||
if [ "_$1" = "_--silent" ]; then
|
||||
NVM_SILENT=1
|
||||
shift
|
||||
fi
|
||||
|
||||
local provided_version
|
||||
provided_version="$1"
|
||||
if [ -n "$provided_version" ]; then
|
||||
@@ -1650,7 +1836,7 @@ nvm() {
|
||||
return $EXIT_CODE
|
||||
fi
|
||||
|
||||
echo "Running node $VERSION"
|
||||
[ $NVM_SILENT -eq 1 ] || echo "Running node $VERSION$(nvm_print_npm_version)"
|
||||
NODE_VERSION="$VERSION" $NVM_DIR/nvm-exec "$@"
|
||||
;;
|
||||
"ls" | "list" )
|
||||
@@ -1681,10 +1867,16 @@ nvm() {
|
||||
|
||||
local NVM_LS_REMOTE_EXIT_CODE
|
||||
NVM_LS_REMOTE_EXIT_CODE=0
|
||||
local NVM_LS_REMOTE_OUTPUT
|
||||
NVM_LS_REMOTE_OUTPUT=''
|
||||
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
|
||||
|
||||
@@ -1698,8 +1890,9 @@ nvm() {
|
||||
fi
|
||||
|
||||
local NVM_OUTPUT
|
||||
NVM_OUTPUT="$(echo "$NVM_LS_REMOTE_OUTPUT
|
||||
$NVM_LS_REMOTE_IOJS_OUTPUT" | command grep -v "N/A" | command sed '/^$/d')"
|
||||
NVM_OUTPUT="$(echo "$NVM_LS_REMOTE_PRE_MERGED_OUTPUT
|
||||
$NVM_LS_REMOTE_IOJS_OUTPUT
|
||||
$NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command 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
|
||||
@@ -1783,7 +1976,11 @@ $NVM_LS_REMOTE_IOJS_OUTPUT" | command grep -v "N/A" | command sed '/^$/d')"
|
||||
DEST="$(nvm_print_implicit_alias local "$ALIAS")"
|
||||
if [ "_$DEST" != "_" ]; then
|
||||
VERSION="$(nvm_version "$DEST")"
|
||||
echo "$ALIAS -> $DEST (-> $VERSION) (default)"
|
||||
if [ "_$DEST" = "_$VERSION" ]; then
|
||||
echo "$ALIAS -> $DEST (default)"
|
||||
else
|
||||
echo "$ALIAS -> $DEST (-> $VERSION) (default)"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -1875,7 +2072,7 @@ $NVM_LS_REMOTE_IOJS_OUTPUT" | command grep -v "N/A" | command sed '/^$/d')"
|
||||
nvm_remote_version "$2"
|
||||
;;
|
||||
"--version" )
|
||||
echo "0.26.1"
|
||||
echo "0.27.1"
|
||||
;;
|
||||
"unload" )
|
||||
unset -f nvm nvm_print_versions nvm_checksum \
|
||||
@@ -1914,15 +2111,15 @@ nvm_supports_source_options() {
|
||||
[ "_$(echo 'echo $1' | . /dev/stdin yes 2> /dev/null)" = "_yes" ]
|
||||
}
|
||||
|
||||
VERSION="$(nvm_alias default 2>/dev/null || echo)"
|
||||
NVM_VERSION="$(nvm_alias default 2>/dev/null || echo)"
|
||||
if nvm_supports_source_options && [ "_$1" = "_--install" ]; then
|
||||
if [ -n "$VERSION" ]; then
|
||||
nvm install "$VERSION" >/dev/null
|
||||
if [ -n "$NVM_VERSION" ]; then
|
||||
nvm install "$NVM_VERSION" >/dev/null
|
||||
elif nvm_rc_version >/dev/null 2>&1; then
|
||||
nvm install >/dev/null
|
||||
fi
|
||||
elif [ -n "$VERSION" ]; then
|
||||
nvm use --silent "$VERSION" >/dev/null
|
||||
elif [ -n "$NVM_VERSION" ]; then
|
||||
nvm use --silent "$NVM_VERSION" >/dev/null
|
||||
elif nvm_rc_version >/dev/null 2>&1; then
|
||||
nvm use --silent >/dev/null
|
||||
fi
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "nvm",
|
||||
"version": "0.26.1",
|
||||
"version": "0.27.1",
|
||||
"description": "Node Version Manager - Simple bash script to manage multiple active node.js versions",
|
||||
"directories": {
|
||||
"test": "test"
|
||||
|
@@ -7,7 +7,7 @@ die () { echo $@ ; exit 1; }
|
||||
[ `expr $PATH : ".*v0.2.3/.*/bin"` = 0 ] || echo "WARNING: Unexpectedly found v0.2.3 already active" >&2
|
||||
|
||||
. ../../nvm.sh
|
||||
nvm use v0.2.3 || die "Failed to activate v0.2.3"
|
||||
nvm use --delete-prefix v0.2.3 || die "Failed to activate v0.2.3"
|
||||
[ `expr "$PATH" : ".*v0.2.3/.*/bin"` != 0 ] || die "PATH not set up properly"
|
||||
[ `expr "$NODE_PATH" : ".*v0.2.3/.*/lib/node_modules"` = 0 ] || die "NODE_PATH should not contain (npm root -g)"
|
||||
# ^ note: NODE_PATH should not contain `npm root -g` since globals should not be requireable
|
||||
|
@@ -23,8 +23,16 @@ EXPECTED_OUTPUT=''
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \
|
||||
|| die "'nvm use --silent foo' did not output '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
|
||||
OUTPUT="$(nvm use foo --silent 2>&1)"
|
||||
EXPECTED_OUTPUT=''
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \
|
||||
|| die "'nvm use foo --silent' did not output '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
|
||||
EXIT_CODE="$(nvm use --silent foo 2>/dev/null ; echo $?)"
|
||||
[ "_$EXIT_CODE" = "_8" ] || die "Expected exit code 8 from 'nvm use --silent foo'; got $EXIT_CODE"
|
||||
|
||||
EXIT_CODE="$(nvm use foo --silent 2>/dev/null ; echo $?)"
|
||||
[ "_$EXIT_CODE" = "_8" ] || die "Expected exit code 8 from 'nvm use foo --silent'; got $EXIT_CODE"
|
||||
|
||||
cleanup;
|
||||
|
||||
|
74
test/fast/Unit tests/nvm_die_on_prefix
Executable file
74
test/fast/Unit tests/nvm_die_on_prefix
Executable file
@@ -0,0 +1,74 @@
|
||||
#!/bin/sh
|
||||
|
||||
cleanup () {
|
||||
alias nvm_has='\nvm_has'
|
||||
alias npm='\npm'
|
||||
unset -f nvm_has npm
|
||||
}
|
||||
die () { echo $@ ; exit 1; }
|
||||
|
||||
. ../../../nvm.sh
|
||||
|
||||
OUTPUT="$(nvm_die_on_prefix 2>&1)"
|
||||
EXPECTED_OUTPUT="First argument \"delete the prefix\" must be zero or one"
|
||||
EXIT_CODE="$(nvm_die_on_prefix >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix' did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_1" ] || die "'nvm_die_on_prefix' did not exit with 1; got "$EXIT_CODE""
|
||||
|
||||
OUTPUT="$(nvm_die_on_prefix 2 2>&1)"
|
||||
EXPECTED_OUTPUT="First argument \"delete the prefix\" must be zero or one"
|
||||
EXIT_CODE="$(nvm_die_on_prefix 2 >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 2' did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_1" ] || die "'nvm_die_on_prefix' did not exit with 1; got "$EXIT_CODE""
|
||||
|
||||
OUTPUT="$(nvm_die_on_prefix 0 2>&1)"
|
||||
EXPECTED_OUTPUT="Second argument \"nvm command\" must be nonempty"
|
||||
EXIT_CODE="$(nvm_die_on_prefix 0 >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 0' did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_2" ] || die "'nvm_die_on_prefix 0' did not exit with 2; got '$EXIT_CODE'"
|
||||
|
||||
nvm_has() { return 1; } # ie, npm is not installed
|
||||
OUTPUT="$(nvm_die_on_prefix 0 foo 2>&1)"
|
||||
[ -z "$OUTPUT" ] || die "nvm_die_on_prefix was not a noop when nvm_has returns 1, got '$OUTPUT'"
|
||||
|
||||
nvm_has() { return 0; }
|
||||
|
||||
npm() {
|
||||
local args
|
||||
args="$@"
|
||||
if [ "_$args" = "_config get prefix" ]; then
|
||||
echo "$(nvm_version_dir new)/good prefix"
|
||||
fi
|
||||
}
|
||||
OUTPUT="$(nvm_die_on_prefix 0 foo 2>&1)"
|
||||
[ -z "$OUTPUT" ] || die "'nvm_die_on_prefix' was not a noop when prefix is good; got '$OUTPUT'"
|
||||
|
||||
OUTPUT="$(PREFIX=bar nvm_die_on_prefix 0 foo 2>&1)"
|
||||
EXPECTED_OUTPUT='nvm is not compatible with the "PREFIX" environment variable: currently set to "bar"
|
||||
Run `unset PREFIX` to unset it.'
|
||||
EXIT_CODE="$(PREFIX=bar nvm_die_on_prefix 0 foo >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'PREFIX=bar nvm_die_on_prefix 0 foo' did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_3" ] || die "'PREFIX=bar nvm_die_on_prefix 0 foo' did not exit with 3; got '$EXIT_CODE'"
|
||||
|
||||
OUTPUT="$(NPM_CONFIG_PREFIX=bar nvm_die_on_prefix 0 foo 2>&1)"
|
||||
EXPECTED_OUTPUT='nvm is not compatible with the "NPM_CONFIG_PREFIX" environment variable: currently set to "bar"
|
||||
Run `unset NPM_CONFIG_PREFIX` to unset it.'
|
||||
EXIT_CODE="$(NPM_CONFIG_PREFIX=bar nvm_die_on_prefix 0 foo >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'NPM_CONFIG_PREFIX=bar nvm_die_on_prefix 0 foo' did not error with '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_4" ] || die "'NPM_CONFIG_PREFIX=bar nvm_die_on_prefix 0 foo' did not exit with 4; got '$EXIT_CODE'"
|
||||
|
||||
npm() {
|
||||
local args
|
||||
args="$@"
|
||||
if [ "_$args" = "_config get prefix" ]; then
|
||||
echo "./bad prefix"
|
||||
fi
|
||||
}
|
||||
OUTPUT="$(nvm_die_on_prefix 0 foo 2>&1)"
|
||||
EXPECTED_OUTPUT="nvm is not compatible with the npm config \"prefix\" option: currently set to \"./bad prefix\"
|
||||
Run \`npm config delete prefix\` or \`foo\` to unset it."
|
||||
EXIT_CODE="$(nvm_die_on_prefix 0 foo >/dev/null 2>&1; echo $?)"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_die_on_prefix 0 foo' did not error with '$EXPECTED_OUTPUT' with bad prefix set; got '$OUTPUT'"
|
||||
[ "_$EXIT_CODE" = "_10" ] || die "'nvm_die_on_prefix 0 foo' did not exit with 10 with bad prefix set; got '$EXIT_CODE'"
|
||||
|
||||
cleanup
|
@@ -20,4 +20,11 @@ EXIT_CODE=$?
|
||||
[ "_$OUTPUT" = "_" ] || die "expected 'nvm_ensure_version_installed 0.1' to have no output, got $OUTPUT"
|
||||
[ "_$EXIT_CODE" = "_0" ] || die "expected 'nvm_ensure_version_installed 0.1' to exit with 0, got $EXIT_CODE"
|
||||
|
||||
# Special case for "iojs"
|
||||
OUTPUT="$(nvm_ensure_version_installed iojs 2>&1)"
|
||||
EXIT_CODE=$?
|
||||
EXPECTED_OUTPUT='N/A: version "iojs" is not yet installed'
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "expected 'nvm_ensure_version_installed iojs' to give $EXPECTED_OUTPUT, got $OUTPUT"
|
||||
[ "_$EXIT_CODE" = "_1" ] || die "expected 'nvm_ensure_version_installed iojs' to exit with 1, got $EXIT_CODE"
|
||||
|
||||
cleanup
|
||||
|
10
test/fast/Unit tests/nvm_is_merged_node_version
Executable file
10
test/fast/Unit tests/nvm_is_merged_node_version
Executable file
@@ -0,0 +1,10 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo $@ ; exit 1; }
|
||||
|
||||
. ../../../nvm.sh
|
||||
|
||||
nvm_is_merged_node_version '4.0' || die '"nvm_is_merged_node_version 4.0 was not true'
|
||||
nvm_is_merged_node_version '5.1' || die '"nvm_is_merged_node_version 5.1 was not true'
|
||||
! nvm_is_merged_node_version '3.99' || die '"nvm_is_merged_node_version 3.99 was not false'
|
||||
! nvm_is_merged_node_version 'v1.0.0' || die '"nvm_is_merged_node_version v1.0.0" was not false'
|
22
test/slow/nvm use/Running "nvm use" calls "nvm_die_on_prefix"
Executable file
22
test/slow/nvm use/Running "nvm use" calls "nvm_die_on_prefix"
Executable file
@@ -0,0 +1,22 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo $@ ; exit 1; }
|
||||
|
||||
. ../../../nvm.sh
|
||||
|
||||
nvm deactivate >/dev/null 2>&1 || die 'deactivate failed'
|
||||
|
||||
nvm_die_on_prefix() {
|
||||
echo >&2 "| $1 | $2 |"
|
||||
return 3
|
||||
}
|
||||
|
||||
OUTPUT="$(nvm use --silent node)"
|
||||
EXPECTED_OUTPUT=""
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \
|
||||
|| die "'nvm use --silent node' did not call through to 'nvm_die_on_prefix' and give output '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
|
||||
EXIT_CODE="$(nvm use --silent node >/dev/null 2>&1; echo $?)"
|
||||
EXPECTED_CODE="11"
|
||||
[ "_$EXIT_CODE" = "_$EXPECTED_CODE" ] \
|
||||
|| die "'nvm use --silent node' when 'nvm_die_on_prefix' fails did not return '$EXPECTED_CODE'; got '$EXIT_CODE'"
|
Reference in New Issue
Block a user