mirror of
https://github.com/nvm-sh/nvm.git
synced 2025-12-13 08:34:19 +00:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
df9ac58f8b | ||
|
|
8dbc22f0e9 | ||
|
|
5c12680a62 | ||
|
|
f0f8ed12f8 | ||
|
|
759f70f196 | ||
|
|
06a9179309 | ||
|
|
74eb396099 |
59
README.md
59
README.md
@@ -19,6 +19,7 @@
|
|||||||
- [Install & Update Script](#install--update-script)
|
- [Install & Update Script](#install--update-script)
|
||||||
- [Additional Notes](#additional-notes)
|
- [Additional Notes](#additional-notes)
|
||||||
- [Installing in Docker](#installing-in-docker)
|
- [Installing in Docker](#installing-in-docker)
|
||||||
|
- [Installing in Docker for CICD-Jobs](#installing-in-docker-for-cicd-jobs)
|
||||||
- [Troubleshooting on Linux](#troubleshooting-on-linux)
|
- [Troubleshooting on Linux](#troubleshooting-on-linux)
|
||||||
- [Troubleshooting on macOS](#troubleshooting-on-macos)
|
- [Troubleshooting on macOS](#troubleshooting-on-macos)
|
||||||
- [Ansible](#ansible)
|
- [Ansible](#ansible)
|
||||||
@@ -154,6 +155,62 @@ RUN echo node > .nvmrc
|
|||||||
RUN nvm install
|
RUN nvm install
|
||||||
```
|
```
|
||||||
|
|
||||||
|
##### Installing in Docker for CICD-Jobs
|
||||||
|
|
||||||
|
More robust, works in CI/CD-Jobs. Can be run in interactive and non-interactive containers.
|
||||||
|
See https://github.com/nvm-sh/nvm/issues/3531.
|
||||||
|
|
||||||
|
```Dockerfile
|
||||||
|
FROM ubuntu:latest
|
||||||
|
ARG NODE_VERSION=20
|
||||||
|
|
||||||
|
# install curl
|
||||||
|
RUN apt update && apt install curl -y
|
||||||
|
|
||||||
|
# install nvm
|
||||||
|
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
|
||||||
|
|
||||||
|
# set env
|
||||||
|
ENV NVM_DIR=/root/.nvm
|
||||||
|
|
||||||
|
# install node
|
||||||
|
RUN bash -c "source $NVM_DIR/nvm.sh && nvm install $NODE_VERSION"
|
||||||
|
|
||||||
|
# set ENTRYPOINT for reloading nvm-environment
|
||||||
|
ENTRYPOINT ["bash", "-c", "source $NVM_DIR/nvm.sh && exec \"$@\"", "--"]
|
||||||
|
|
||||||
|
# set cmd to bash
|
||||||
|
CMD ["/bin/bash"]
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
This example defaults to installation of nodejs version 20.x.y. Optionally you can easily override the version with docker build args like:
|
||||||
|
```
|
||||||
|
docker build -t nvmimage --build-arg NODE_VERSION=19 .
|
||||||
|
```
|
||||||
|
|
||||||
|
After creation of the image you can start container interactively and run commands, for example:
|
||||||
|
```
|
||||||
|
docker run --rm -it nvmimage
|
||||||
|
|
||||||
|
root@0a6b5a237c14:/# nvm -v
|
||||||
|
0.40.1
|
||||||
|
|
||||||
|
root@0a6b5a237c14:/# node -v
|
||||||
|
v19.9.0
|
||||||
|
|
||||||
|
root@0a6b5a237c14:/# npm -v
|
||||||
|
9.6.3
|
||||||
|
```
|
||||||
|
|
||||||
|
Noninteractive example:
|
||||||
|
```
|
||||||
|
user@host:/tmp/test $ docker run --rm -it nvmimage node -v
|
||||||
|
v19.9.0
|
||||||
|
user@host:/tmp/test $ docker run --rm -it nvmimage npm -v
|
||||||
|
9.6.3
|
||||||
|
```
|
||||||
|
|
||||||
#### Troubleshooting on Linux
|
#### Troubleshooting on Linux
|
||||||
|
|
||||||
On Linux, after running the install script, if you get `nvm: command not found` or see no feedback from your terminal after you type `command -v nvm`, simply close your current terminal, open a new terminal, and try verifying again.
|
On Linux, after running the install script, if you get `nvm: command not found` or see no feedback from your terminal after you type `command -v nvm`, simply close your current terminal, open a new terminal, and try verifying again.
|
||||||
@@ -833,7 +890,7 @@ my_alias default v10.22.0 v12.18.3 v14.8.0
|
|||||||
|
|
||||||
## Compatibility Issues
|
## Compatibility Issues
|
||||||
|
|
||||||
`nvm` will encounter some issues if you have some non-default settings set. (see [#606](https://github.com/creationix/nvm/issues/606))
|
`nvm` will encounter some issues if you have some non-default settings set. (see [#606](https://github.com/nvm-sh/nvm/issues/606))
|
||||||
The following are known to cause issues:
|
The following are known to cause issues:
|
||||||
|
|
||||||
Inside `~/.npmrc`:
|
Inside `~/.npmrc`:
|
||||||
|
|||||||
61
nvm.sh
61
nvm.sh
@@ -136,15 +136,17 @@ nvm_download() {
|
|||||||
eval "curl -q --fail ${CURL_COMPRESSED_FLAG:-} ${CURL_HEADER_FLAG:-} ${NVM_DOWNLOAD_ARGS}"
|
eval "curl -q --fail ${CURL_COMPRESSED_FLAG:-} ${CURL_HEADER_FLAG:-} ${NVM_DOWNLOAD_ARGS}"
|
||||||
elif nvm_has "wget"; then
|
elif nvm_has "wget"; then
|
||||||
# Emulate curl with wget
|
# Emulate curl with wget
|
||||||
ARGS=$(nvm_echo "$@" | command sed -e 's/--progress-bar /--progress=bar /' \
|
ARGS=$(nvm_echo "$@" | command sed "
|
||||||
-e 's/--compressed //' \
|
s/--progress-bar /--progress=bar /
|
||||||
-e 's/--fail //' \
|
s/--compressed //
|
||||||
-e 's/-L //' \
|
s/--fail //
|
||||||
-e 's/-I /--server-response /' \
|
s/-L //
|
||||||
-e 's/-s /-q /' \
|
s/-I /--server-response /
|
||||||
-e 's/-sS /-nv /' \
|
s/-s /-q /
|
||||||
-e 's/-o /-O /' \
|
s/-sS /-nv /
|
||||||
-e 's/-C - /-c /')
|
s/-o /-O /
|
||||||
|
s/-C - /-c /
|
||||||
|
")
|
||||||
|
|
||||||
if [ -n "${NVM_AUTH_HEADER:-}" ]; then
|
if [ -n "${NVM_AUTH_HEADER:-}" ]; then
|
||||||
ARGS="${ARGS} --header \"${NVM_AUTH_HEADER}\""
|
ARGS="${ARGS} --header \"${NVM_AUTH_HEADER}\""
|
||||||
@@ -1413,11 +1415,11 @@ nvm_add_iojs_prefix() {
|
|||||||
nvm_strip_iojs_prefix() {
|
nvm_strip_iojs_prefix() {
|
||||||
local NVM_IOJS_PREFIX
|
local NVM_IOJS_PREFIX
|
||||||
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
|
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
|
||||||
if [ "${1-}" = "${NVM_IOJS_PREFIX}" ]; then
|
|
||||||
nvm_echo
|
case "${1-}" in
|
||||||
else
|
"${NVM_IOJS_PREFIX}") nvm_echo ;;
|
||||||
nvm_echo "${1#"${NVM_IOJS_PREFIX}"-}"
|
*) nvm_echo "${1#"${NVM_IOJS_PREFIX}"-}" ;;
|
||||||
fi
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
nvm_ls() {
|
nvm_ls() {
|
||||||
@@ -1549,12 +1551,15 @@ nvm_ls() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${NVM_ADD_SYSTEM-}" = true ]; then
|
if [ "${NVM_ADD_SYSTEM-}" = true ]; then
|
||||||
if [ -z "${PATTERN}" ] || [ "${PATTERN}" = 'v' ]; then
|
case "${PATTERN}" in
|
||||||
VERSIONS="${VERSIONS}
|
'' | v)
|
||||||
|
VERSIONS="${VERSIONS}
|
||||||
system"
|
system"
|
||||||
elif [ "${PATTERN}" = 'system' ]; then
|
;;
|
||||||
VERSIONS="system"
|
system)
|
||||||
fi
|
VERSIONS="system"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "${VERSIONS}" ]; then
|
if [ -z "${VERSIONS}" ]; then
|
||||||
@@ -1688,15 +1693,10 @@ EOF
|
|||||||
LTS="${LTS#lts/}"
|
LTS="${LTS#lts/}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
VERSIONS="$({ command awk -v lts="${LTS-}" -v pattern="${PATTERN:-.*}" '
|
VERSIONS="$( { command awk -v lts="${LTS-}" '{
|
||||||
BEGIN {
|
if (!$1) { next }
|
||||||
if (pattern == "") pattern = ".*"
|
if (lts && $10 ~ /^\-?$/) { next }
|
||||||
}
|
if (lts && lts != "*" && tolower($10) !~ tolower(lts)) { next }
|
||||||
{
|
|
||||||
if (!$1) { next } # skip empty lines
|
|
||||||
if (lts && $10 ~ /^\-?$/) { next } # skip if LTS wanted, and row is not LTS
|
|
||||||
if (lts && lts != "*" && tolower($10) !~ tolower(lts)) { next } # skip if LTS filter does not match
|
|
||||||
if ($1 !~ pattern) { next } # only keep rows matching the pattern
|
|
||||||
if ($10 !~ /^\-?$/) {
|
if ($10 !~ /^\-?$/) {
|
||||||
if ($10 && $10 != prev) {
|
if ($10 && $10 != prev) {
|
||||||
print $1, $10, "*"
|
print $1, $10, "*"
|
||||||
@@ -1708,6 +1708,7 @@ EOF
|
|||||||
}
|
}
|
||||||
prev=$10;
|
prev=$10;
|
||||||
}' \
|
}' \
|
||||||
|
| nvm_grep -w "${PATTERN:-.*}" \
|
||||||
| $SORT_COMMAND; } << EOF
|
| $SORT_COMMAND; } << EOF
|
||||||
$VERSION_LIST
|
$VERSION_LIST
|
||||||
EOF
|
EOF
|
||||||
@@ -2736,10 +2737,10 @@ nvm_npm_global_modules() {
|
|||||||
local NPMLIST
|
local NPMLIST
|
||||||
local VERSION
|
local VERSION
|
||||||
VERSION="$1"
|
VERSION="$1"
|
||||||
NPMLIST=$(nvm use "${VERSION}" >/dev/null && npm list -g --depth=0 2>/dev/null | command sed 1,1d | nvm_grep -v 'UNMET PEER DEPENDENCY')
|
NPMLIST=$(nvm use "${VERSION}" >/dev/null && npm list -g --depth=0 2>/dev/null | command sed -e '1d' -e '/UNMET PEER DEPENDENCY/d')
|
||||||
|
|
||||||
local INSTALLS
|
local INSTALLS
|
||||||
INSTALLS=$(nvm_echo "${NPMLIST}" | command sed -e '/ -> / d' -e '/\(empty\)/ d' -e 's/^.* \(.*@[^ ]*\).*/\1/' -e '/^npm@[^ ]*.*$/ d' | command xargs)
|
INSTALLS=$(nvm_echo "${NPMLIST}" | command sed -e '/ -> / d' -e '/\(empty\)/ d' -e 's/^.* \(.*@[^ ]*\).*/\1/' -e '/^npm@[^ ]*.*$/ d' -e '/^corepack@[^ ]*.*$/ d' | command xargs)
|
||||||
|
|
||||||
local LINKS
|
local LINKS
|
||||||
LINKS="$(nvm_echo "${NPMLIST}" | command sed -n 's/.* -> \(.*\)/\1/ p')"
|
LINKS="$(nvm_echo "${NPMLIST}" | command sed -n 's/.* -> \(.*\)/\1/ p')"
|
||||||
|
|||||||
@@ -45,9 +45,9 @@
|
|||||||
"dockerfile_lint": "^0.3.4",
|
"dockerfile_lint": "^0.3.4",
|
||||||
"doctoc": "^2.2.1",
|
"doctoc": "^2.2.1",
|
||||||
"eclint": "^2.8.1",
|
"eclint": "^2.8.1",
|
||||||
"markdown-link-check": "^3.12.2",
|
"markdown-link-check": "^3.13.7",
|
||||||
"replace": "^1.2.2",
|
"replace": "^1.2.2",
|
||||||
"semver": "^7.6.3",
|
"semver": "^7.7.1",
|
||||||
"urchin": "^0.0.5"
|
"urchin": "^0.0.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,11 +83,4 @@ EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH")"
|
|||||||
OUTPUT="$(NVM_LTS=argon nvm_ls_remote)"
|
OUTPUT="$(NVM_LTS=argon nvm_ls_remote)"
|
||||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "\`NVM_LTS=argon nvm_ls_remote\` did not output >$EXPECTED_OUTPUT<; got >$OUTPUT<"
|
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "\`NVM_LTS=argon nvm_ls_remote\` did not output >$EXPECTED_OUTPUT<; got >$OUTPUT<"
|
||||||
|
|
||||||
OUTPUT="$(nvm_ls_remote Argon 2>&1)"
|
|
||||||
EXIT_CODE=$?
|
|
||||||
[ $EXIT_CODE -eq 3 ] || die "nvm_ls_remote Argon did not exit 3, got '${EXIT_CODE}'"
|
|
||||||
|
|
||||||
EXPECTED_OUTPUT='N/A'
|
|
||||||
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] || die "nvm_ls_remote Argon did not output expected error message; got >${OUTPUT}< expected >${EXPECTED_OUTPUT}<"
|
|
||||||
|
|
||||||
cleanup
|
cleanup
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ EXPECTED_PACKAGES_INSTALL="autoprefixer bower david@11 grunt-cli grunth-cli http
|
|||||||
echo "$EXPECTED_PACKAGES_INSTALL" | sed -e 's/test-npmlink //' | xargs npm install -g --quiet
|
echo "$EXPECTED_PACKAGES_INSTALL" | sed -e 's/test-npmlink //' | xargs npm install -g --quiet
|
||||||
|
|
||||||
get_packages() {
|
get_packages() {
|
||||||
npm list -g --depth=0 | \sed -e '1 d' -e 's/^.* \(.*\)@.*/\1/' -e '/^npm$/ d' | xargs
|
npm list -g --depth=0 | \sed -e '1 d' -e 's/^.* \(.*\)@.*/\1/' -e '/^npm$/ d' -e '/^corepack$/ d' | xargs
|
||||||
}
|
}
|
||||||
|
|
||||||
nvm use 0.10.29
|
nvm use 0.10.29
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ die () { echo "$@" ; exit 1; }
|
|||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
get_packages() {
|
get_packages() {
|
||||||
npm list -g --depth=0 | \sed -e '1 d' -e 's/^.* \(.*\)@.*/\1/' -e '/^npm$/ d' | xargs
|
npm list -g --depth=0 | \sed -e '1 d' -e 's/^.* \(.*\)@.*/\1/' -e '/^npm$/ d' -e '/^corepack$/ d' | xargs
|
||||||
}
|
}
|
||||||
|
|
||||||
nvm use 4.7.2
|
nvm use 4.7.2
|
||||||
@@ -14,5 +14,14 @@ ORIGINAL_PACKAGES=$(get_packages)
|
|||||||
nvm reinstall-packages 4.7.1
|
nvm reinstall-packages 4.7.1
|
||||||
FINAL_PACKAGES=$(get_packages)
|
FINAL_PACKAGES=$(get_packages)
|
||||||
|
|
||||||
[ -z "${ORIGINAL_PACKAGES}" ] || die "original packages were not empty: ${ORIGINAL_PACKAGES}"
|
[ -z "${ORIGINAL_PACKAGES}" ] || die "v4: original packages were not empty: ${ORIGINAL_PACKAGES}"
|
||||||
[ -z "${FINAL_PACKAGES}" ] || die "final packages were not empty: ${FINAL_PACKAGES}"
|
[ -z "${FINAL_PACKAGES}" ] || die "v4: final packages were not empty: ${FINAL_PACKAGES}"
|
||||||
|
|
||||||
|
nvm use 23.8.20
|
||||||
|
ORIGINAL_PACKAGES=$(get_packages)
|
||||||
|
|
||||||
|
nvm reinstall-packages 23.8.0
|
||||||
|
FINAL_PACKAGES=$(get_packages)
|
||||||
|
|
||||||
|
[ -z "${ORIGINAL_PACKAGES}" ] || die "v23: original packages were not empty: ${ORIGINAL_PACKAGES}"
|
||||||
|
[ -z "${FINAL_PACKAGES}" ] || die "v23: final packages were not empty: ${FINAL_PACKAGES}"
|
||||||
|
|||||||
Reference in New Issue
Block a user