|
8 | 8 | # Maintainer: The Dev Container spec maintainers |
9 | 9 |
|
10 | 10 | export NODE_VERSION="${VERSION:-"lts"}" |
| 11 | +export NPM_VERSION="${NPMVERSION:-"lts"}" |
11 | 12 | export PNPM_VERSION="${PNPMVERSION:-"latest"}" |
12 | 13 | export NVM_VERSION="${NVMVERSION:-"latest"}" |
13 | 14 | export NVM_DIR="${NVMINSTALLPATH:-"/usr/local/share/nvm"}" |
@@ -381,6 +382,41 @@ if [ ! -z "${ADDITIONAL_VERSIONS}" ]; then |
381 | 382 | IFS=$OLDIFS |
382 | 383 | fi |
383 | 384 |
|
| 385 | +# Install or update npm to specific version |
| 386 | +if [ ! -z "${NPM_VERSION}" ] && [ "${NPM_VERSION}" = "none" ]; then |
| 387 | + echo "Ignoring NPM version update" |
| 388 | +else |
| 389 | + if bash -c ". '${NVM_DIR}/nvm.sh' && type npm >/dev/null 2>&1"; then |
| 390 | + ( |
| 391 | + . "${NVM_DIR}/nvm.sh" |
| 392 | + [ ! -z "$http_proxy" ] && npm set proxy="$http_proxy" |
| 393 | + [ ! -z "$https_proxy" ] && npm set https-proxy="$https_proxy" |
| 394 | + [ ! -z "$no_proxy" ] && npm set noproxy="$no_proxy" |
| 395 | + echo "Installing npm version ${NPM_VERSION}..." |
| 396 | + |
| 397 | + # Clear npm cache to avoid conflicts |
| 398 | + npm cache clean --force 2>/dev/null || true |
| 399 | + |
| 400 | + # Try npm installation with retries |
| 401 | + for i in {1..3}; do |
| 402 | + if npm install -g npm@$NPM_VERSION --force; then |
| 403 | + echo "Successfully installed npm@${NPM_VERSION}" |
| 404 | + break |
| 405 | + else |
| 406 | + echo "Attempt $i failed, retrying..." |
| 407 | + sleep 2 |
| 408 | + if [ $i -eq 3 ]; then |
| 409 | + echo "Failed to install npm@${NPM_VERSION} after 3 attempts. Trying latest npm as fallback..." |
| 410 | + npm install -g npm@latest --force || echo "Fallback to latest npm also failed. Keeping current npm version $(npm --version 2>/dev/null || echo 'unknown')." |
| 411 | + fi |
| 412 | + fi |
| 413 | + done |
| 414 | + ) |
| 415 | + else |
| 416 | + echo "Skip installing/updating npm because npm is not available" |
| 417 | + fi |
| 418 | +fi |
| 419 | + |
384 | 420 | # Install pnpm |
385 | 421 | if [ ! -z "${PNPM_VERSION}" ] && [ "${PNPM_VERSION}" = "none" ]; then |
386 | 422 | echo "Ignoring installation of PNPM" |
|
0 commit comments