@fredlackey/devutils 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/package.json +1 -1
- package/src/commands/install.js +374 -36
- package/src/installs/adobe-creative-cloud.js +527 -25
- package/src/installs/adobe-creative-cloud.md +605 -0
- package/src/installs/appcleaner.js +303 -26
- package/src/installs/appcleaner.md +699 -0
- package/src/installs/apt-transport-https.js +390 -0
- package/src/installs/apt-transport-https.md +678 -0
- package/src/installs/atomicparsley.js +624 -26
- package/src/installs/atomicparsley.md +795 -0
- package/src/installs/aws-cli.js +779 -26
- package/src/installs/aws-cli.md +727 -0
- package/src/installs/balena-etcher.js +688 -26
- package/src/installs/balena-etcher.md +761 -0
- package/src/installs/bambu-studio.js +912 -26
- package/src/installs/bambu-studio.md +780 -0
- package/src/installs/bash-completion.js +554 -23
- package/src/installs/bash-completion.md +833 -0
- package/src/installs/bash.js +399 -26
- package/src/installs/bash.md +993 -0
- package/src/installs/beyond-compare.js +585 -26
- package/src/installs/beyond-compare.md +813 -0
- package/src/installs/build-essential.js +511 -26
- package/src/installs/build-essential.md +977 -0
- package/src/installs/ca-certificates.js +618 -0
- package/src/installs/ca-certificates.md +937 -0
- package/src/installs/caffeine.js +490 -26
- package/src/installs/caffeine.md +839 -0
- package/src/installs/camtasia.js +577 -25
- package/src/installs/camtasia.md +762 -0
- package/src/installs/chatgpt.js +458 -26
- package/src/installs/chatgpt.md +814 -0
- package/src/installs/chocolatey.js +447 -0
- package/src/installs/chocolatey.md +661 -0
- package/src/installs/chrome-canary.js +472 -26
- package/src/installs/chrome-canary.md +641 -0
- package/src/installs/chromium.js +645 -26
- package/src/installs/chromium.md +838 -0
- package/src/installs/claude-code.js +558 -26
- package/src/installs/claude-code.md +1173 -0
- package/src/installs/curl.js +361 -26
- package/src/installs/curl.md +714 -0
- package/src/installs/cursor.js +561 -26
- package/src/installs/cursor.md +970 -0
- package/src/installs/dbschema.js +674 -26
- package/src/installs/dbschema.md +925 -0
- package/src/installs/dependencies.md +435 -0
- package/src/installs/development-tools.js +600 -0
- package/src/installs/development-tools.md +977 -0
- package/src/installs/docker.js +1010 -25
- package/src/installs/docker.md +1109 -0
- package/src/installs/drawio.js +1001 -26
- package/src/installs/drawio.md +795 -0
- package/src/installs/elmedia-player.js +328 -25
- package/src/installs/elmedia-player.md +556 -0
- package/src/installs/ffmpeg.js +870 -25
- package/src/installs/ffmpeg.md +852 -0
- package/src/installs/file.js +464 -0
- package/src/installs/file.md +987 -0
- package/src/installs/gemini-cli.js +793 -26
- package/src/installs/gemini-cli.md +1153 -0
- package/src/installs/git.js +382 -26
- package/src/installs/git.md +907 -0
- package/src/installs/gitego.js +931 -26
- package/src/installs/gitego.md +1172 -0
- package/src/installs/go.js +913 -26
- package/src/installs/go.md +958 -0
- package/src/installs/google-chrome.js +801 -25
- package/src/installs/google-chrome.md +862 -0
- package/src/installs/gpg.js +412 -73
- package/src/installs/gpg.md +1056 -0
- package/src/installs/homebrew.js +1015 -26
- package/src/installs/homebrew.md +988 -0
- package/src/installs/imageoptim.js +950 -26
- package/src/installs/imageoptim.md +1119 -0
- package/src/installs/installers.json +2297 -0
- package/src/installs/jq.js +382 -26
- package/src/installs/jq.md +809 -0
- package/src/installs/keyboard-maestro.js +701 -26
- package/src/installs/keyboard-maestro.md +825 -0
- package/src/installs/latex.js +771 -26
- package/src/installs/latex.md +1095 -0
- package/src/installs/lftp.js +338 -26
- package/src/installs/lftp.md +907 -0
- package/src/installs/lsb-release.js +346 -0
- package/src/installs/lsb-release.md +814 -0
- package/src/installs/messenger.js +829 -26
- package/src/installs/messenger.md +900 -0
- package/src/installs/microsoft-office.js +550 -26
- package/src/installs/microsoft-office.md +760 -0
- package/src/installs/microsoft-teams.js +782 -25
- package/src/installs/microsoft-teams.md +886 -0
- package/src/installs/node.js +886 -26
- package/src/installs/node.md +1153 -0
- package/src/installs/nordpass.js +698 -26
- package/src/installs/nordpass.md +921 -0
- package/src/installs/nvm.js +977 -26
- package/src/installs/nvm.md +1057 -0
- package/src/installs/openssh.js +734 -64
- package/src/installs/openssh.md +1056 -0
- package/src/installs/pandoc.js +644 -26
- package/src/installs/pandoc.md +1036 -0
- package/src/installs/pinentry.js +492 -26
- package/src/installs/pinentry.md +1142 -0
- package/src/installs/pngyu.js +851 -26
- package/src/installs/pngyu.md +896 -0
- package/src/installs/postman.js +781 -26
- package/src/installs/postman.md +940 -0
- package/src/installs/procps.js +425 -0
- package/src/installs/procps.md +851 -0
- package/src/installs/safari-tech-preview.js +355 -25
- package/src/installs/safari-tech-preview.md +533 -0
- package/src/installs/sfnt2woff.js +640 -26
- package/src/installs/sfnt2woff.md +795 -0
- package/src/installs/shellcheck.js +463 -26
- package/src/installs/shellcheck.md +1005 -0
- package/src/installs/slack.js +722 -25
- package/src/installs/slack.md +865 -0
- package/src/installs/snagit.js +566 -25
- package/src/installs/snagit.md +844 -0
- package/src/installs/software-properties-common.js +372 -0
- package/src/installs/software-properties-common.md +805 -0
- package/src/installs/spotify.js +858 -25
- package/src/installs/spotify.md +901 -0
- package/src/installs/studio-3t.js +803 -26
- package/src/installs/studio-3t.md +918 -0
- package/src/installs/sublime-text.js +780 -25
- package/src/installs/sublime-text.md +914 -0
- package/src/installs/superwhisper.js +687 -25
- package/src/installs/superwhisper.md +630 -0
- package/src/installs/tailscale.js +727 -26
- package/src/installs/tailscale.md +1100 -0
- package/src/installs/tar.js +389 -0
- package/src/installs/tar.md +946 -0
- package/src/installs/termius.js +780 -26
- package/src/installs/termius.md +844 -0
- package/src/installs/terraform.js +761 -26
- package/src/installs/terraform.md +899 -0
- package/src/installs/tidal.js +752 -25
- package/src/installs/tidal.md +864 -0
- package/src/installs/tmux.js +328 -26
- package/src/installs/tmux.md +1030 -0
- package/src/installs/tree.js +393 -26
- package/src/installs/tree.md +833 -0
- package/src/installs/unzip.js +460 -0
- package/src/installs/unzip.md +879 -0
- package/src/installs/vim.js +403 -26
- package/src/installs/vim.md +1040 -0
- package/src/installs/vlc.js +803 -26
- package/src/installs/vlc.md +927 -0
- package/src/installs/vscode.js +825 -26
- package/src/installs/vscode.md +1002 -0
- package/src/installs/wget.js +415 -0
- package/src/installs/wget.md +791 -0
- package/src/installs/whatsapp.js +710 -25
- package/src/installs/whatsapp.md +854 -0
- package/src/installs/winpty.js +352 -0
- package/src/installs/winpty.md +620 -0
- package/src/installs/woff2.js +535 -26
- package/src/installs/woff2.md +977 -0
- package/src/installs/wsl.js +572 -0
- package/src/installs/wsl.md +699 -0
- package/src/installs/xcode-clt.js +520 -0
- package/src/installs/xcode-clt.md +351 -0
- package/src/installs/xcode.js +542 -26
- package/src/installs/xcode.md +573 -0
- package/src/installs/yarn.js +806 -26
- package/src/installs/yarn.md +1074 -0
- package/src/installs/yq.js +636 -26
- package/src/installs/yq.md +944 -0
- package/src/installs/yt-dlp.js +683 -26
- package/src/installs/yt-dlp.md +946 -0
- package/src/installs/yum-utils.js +297 -0
- package/src/installs/yum-utils.md +648 -0
- package/src/installs/zoom.js +740 -25
- package/src/installs/zoom.md +884 -0
- package/src/scripts/README.md +567 -45
- package/src/scripts/STATUS.md +208 -0
- package/src/scripts/afk.js +395 -7
- package/src/scripts/backup-all.js +731 -9
- package/src/scripts/backup-source.js +711 -8
- package/src/scripts/brewd.js +373 -7
- package/src/scripts/brewi.js +505 -9
- package/src/scripts/brewr.js +512 -9
- package/src/scripts/brews.js +462 -9
- package/src/scripts/brewu.js +488 -7
- package/src/scripts/c.js +185 -7
- package/src/scripts/ccurl.js +325 -8
- package/src/scripts/certbot-crontab-init.js +488 -8
- package/src/scripts/certbot-init.js +641 -9
- package/src/scripts/ch.js +339 -7
- package/src/scripts/claude-danger.js +253 -8
- package/src/scripts/clean-dev.js +419 -8
- package/src/scripts/clear-dns-cache.js +525 -7
- package/src/scripts/clone.js +417 -7
- package/src/scripts/code-all.js +420 -7
- package/src/scripts/count-files.js +195 -8
- package/src/scripts/count-folders.js +195 -8
- package/src/scripts/count.js +248 -8
- package/src/scripts/d.js +203 -7
- package/src/scripts/datauri.js +373 -8
- package/src/scripts/delete-files.js +363 -7
- package/src/scripts/docker-clean.js +410 -8
- package/src/scripts/dp.js +426 -7
- package/src/scripts/e.js +375 -9
- package/src/scripts/empty-trash.js +497 -7
- package/src/scripts/evm.js +428 -9
- package/src/scripts/fetch-github-repos.js +441 -10
- package/src/scripts/get-channel.js +329 -8
- package/src/scripts/get-course.js +384 -11
- package/src/scripts/get-dependencies.js +290 -9
- package/src/scripts/get-folder.js +783 -10
- package/src/scripts/get-tunes.js +411 -10
- package/src/scripts/get-video.js +352 -9
- package/src/scripts/git-backup.js +561 -9
- package/src/scripts/git-clone.js +477 -9
- package/src/scripts/git-pup.js +303 -7
- package/src/scripts/git-push.js +380 -8
- package/src/scripts/h.js +607 -9
- package/src/scripts/hide-desktop-icons.js +483 -7
- package/src/scripts/hide-hidden-files.js +522 -7
- package/src/scripts/install-dependencies-from.js +440 -9
- package/src/scripts/ips.js +647 -10
- package/src/scripts/iso.js +354 -8
- package/src/scripts/killni.js +561 -7
- package/src/scripts/ll.js +451 -8
- package/src/scripts/local-ip.js +310 -8
- package/src/scripts/m.js +508 -8
- package/src/scripts/map.js +293 -8
- package/src/scripts/mkd.js +287 -7
- package/src/scripts/ncu-update-all.js +441 -8
- package/src/scripts/nginx-init.js +702 -12
- package/src/scripts/npmi.js +366 -7
- package/src/scripts/o.js +495 -8
- package/src/scripts/org-by-date.js +321 -7
- package/src/scripts/p.js +208 -7
- package/src/scripts/packages.js +313 -8
- package/src/scripts/path.js +209 -7
- package/src/scripts/ports.js +582 -8
- package/src/scripts/q.js +290 -8
- package/src/scripts/refresh-files.js +378 -10
- package/src/scripts/remove-smaller-files.js +500 -8
- package/src/scripts/rename-files-with-date.js +517 -9
- package/src/scripts/resize-image.js +523 -9
- package/src/scripts/rm-safe.js +653 -8
- package/src/scripts/s.js +525 -9
- package/src/scripts/set-git-public.js +349 -7
- package/src/scripts/show-desktop-icons.js +459 -7
- package/src/scripts/show-hidden-files.js +456 -7
- package/src/scripts/tpa.js +265 -8
- package/src/scripts/tpo.js +264 -7
- package/src/scripts/u.js +489 -7
- package/src/scripts/vpush.js +422 -8
- package/src/scripts/y.js +267 -7
- package/src/utils/common/os.js +94 -2
- package/src/utils/ubuntu/apt.js +13 -7
- package/src/utils/windows/choco.js +82 -26
- package/src/utils/windows/winget.js +89 -27
|
@@ -0,0 +1,1057 @@
|
|
|
1
|
+
# Installing NVM (Node Version Manager)
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
NVM (Node Version Manager) is a version manager for Node.js, designed to be installed per-user, and invoked per-shell. NVM allows you to quickly install and switch between multiple versions of Node.js on the same machine, making it essential for developers who work on projects requiring different Node.js versions.
|
|
6
|
+
|
|
7
|
+
**Important Platform Note**: NVM (nvm-sh/nvm) is designed for POSIX-compliant systems (macOS, Linux, WSL). For native Windows environments (PowerShell, Command Prompt, Git Bash), use **nvm-windows** (coreybutler/nvm-windows), which is a completely separate project with similar functionality but different implementation.
|
|
8
|
+
|
|
9
|
+
## Dependencies
|
|
10
|
+
|
|
11
|
+
### macOS (Homebrew)
|
|
12
|
+
- **Required:**
|
|
13
|
+
- Homebrew package manager - Install via `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"` or run `dev install homebrew`
|
|
14
|
+
- **Optional:** None
|
|
15
|
+
- **Auto-installed:**
|
|
16
|
+
- Shell integration scripts (nvm.sh, bash_completion) - Installed automatically by Homebrew formula
|
|
17
|
+
|
|
18
|
+
### Ubuntu (APT/Snap)
|
|
19
|
+
- **Required:**
|
|
20
|
+
- `curl` - Install via `sudo apt install curl` (installer will install if missing)
|
|
21
|
+
- `git` - Install via `sudo apt install git` (NVM install script requires git to clone the repository)
|
|
22
|
+
- **Optional:** None
|
|
23
|
+
- **Auto-installed:**
|
|
24
|
+
- Build essentials - NVM install script handles dependency installation automatically
|
|
25
|
+
|
|
26
|
+
### Raspberry Pi OS (APT/Snap)
|
|
27
|
+
- **Required:**
|
|
28
|
+
- `curl` - Install via `sudo apt install curl` (installer will install if missing)
|
|
29
|
+
- `git` - Install via `sudo apt install git` (NVM install script requires git to clone the repository)
|
|
30
|
+
- **Optional:**
|
|
31
|
+
- Swap space - For ARMv6 (Pi Zero/1) if compiling Node.js from source: `sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile`
|
|
32
|
+
- **Auto-installed:**
|
|
33
|
+
- Build essentials - NVM install script handles dependency installation automatically
|
|
34
|
+
|
|
35
|
+
### Amazon Linux (DNF/YUM)
|
|
36
|
+
- **Required:**
|
|
37
|
+
- `curl` - Install via `sudo dnf install curl` (AL2023) or `sudo yum install curl` (AL2) - installer will install if missing
|
|
38
|
+
- `git` - Install via `sudo dnf install git` or `sudo yum install git` (NVM install script requires git to clone the repository)
|
|
39
|
+
- **Optional:** None
|
|
40
|
+
- **Auto-installed:**
|
|
41
|
+
- Build essentials - NVM install script handles dependency installation automatically
|
|
42
|
+
|
|
43
|
+
### Windows (Chocolatey/winget)
|
|
44
|
+
- **Required:**
|
|
45
|
+
- Chocolatey OR winget (at least one must be present)
|
|
46
|
+
- Chocolatey: Install via PowerShell (Administrator): `Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))`
|
|
47
|
+
- winget: Pre-installed on Windows 10/11, or install App Installer from Microsoft Store
|
|
48
|
+
- **Optional:** None
|
|
49
|
+
- **Auto-installed:** None
|
|
50
|
+
|
|
51
|
+
### Git Bash (Manual/Portable)
|
|
52
|
+
- **Required:**
|
|
53
|
+
- Git Bash (comes with Git for Windows) - Download from https://git-scm.com/download/win
|
|
54
|
+
- Chocolatey installed on Windows host - Install via PowerShell (see Windows section above)
|
|
55
|
+
- PowerShell access for interop - Pre-installed on Windows
|
|
56
|
+
- **Optional:** None
|
|
57
|
+
- **Auto-installed:** None
|
|
58
|
+
|
|
59
|
+
**Note on Dependencies**: The NVM installer script is designed to be idempotent and will check for required dependencies before installation. On Unix-like systems (macOS, Ubuntu, Raspberry Pi OS, Amazon Linux), the installer will attempt to install `curl` automatically if missing using the system package manager. On Windows and Git Bash, the package manager (Chocolatey or winget) must already be installed.
|
|
60
|
+
|
|
61
|
+
## Prerequisites
|
|
62
|
+
|
|
63
|
+
Before installing NVM on any platform, ensure:
|
|
64
|
+
|
|
65
|
+
1. **Internet connectivity** - Required to download NVM and Node.js versions
|
|
66
|
+
2. **Terminal access** - Command line interface to run installation commands
|
|
67
|
+
3. **Git** (optional) - Required only if using git-based installation method
|
|
68
|
+
4. **No existing Node.js installation** - While not strictly required on Unix systems, it is strongly recommended to uninstall any existing Node.js installations to avoid PATH conflicts
|
|
69
|
+
|
|
70
|
+
**Why remove existing Node.js?** NVM manages Node.js installations in a separate directory (`~/.nvm/versions/node/`). Existing system-wide Node.js installations can cause PATH conflicts, where the system version takes precedence over NVM-managed versions.
|
|
71
|
+
|
|
72
|
+
## Platform-Specific Installation
|
|
73
|
+
|
|
74
|
+
### macOS (Homebrew)
|
|
75
|
+
|
|
76
|
+
#### Prerequisites
|
|
77
|
+
|
|
78
|
+
- macOS 10.15 (Catalina) or later
|
|
79
|
+
- Homebrew package manager installed
|
|
80
|
+
- zsh shell (default on macOS 10.15+) or bash
|
|
81
|
+
|
|
82
|
+
If Homebrew is not installed, install it first:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Remove any existing Node.js installation to avoid conflicts:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
brew uninstall --ignore-dependencies node 2>/dev/null || true
|
|
92
|
+
brew uninstall --force node 2>/dev/null || true
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
#### Installation Steps
|
|
96
|
+
|
|
97
|
+
**Step 1: Install NVM via Homebrew**
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
brew install --quiet nvm
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
The `--quiet` flag suppresses non-essential output for automation-friendly installation.
|
|
104
|
+
|
|
105
|
+
**Step 2: Create the NVM directory**
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
mkdir -p ~/.nvm
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**Step 3: Configure your shell**
|
|
112
|
+
|
|
113
|
+
For zsh (default on macOS), add the following to `~/.zshrc`:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
cat >> ~/.zshrc << 'EOF'
|
|
117
|
+
|
|
118
|
+
# NVM Configuration
|
|
119
|
+
export NVM_DIR="$HOME/.nvm"
|
|
120
|
+
[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh" # This loads nvm
|
|
121
|
+
[ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" # This loads nvm bash_completion
|
|
122
|
+
EOF
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**Note for Intel Macs**: If you have an Intel Mac, replace `/opt/homebrew/` with `/usr/local/` in the paths above.
|
|
126
|
+
|
|
127
|
+
**Step 4: Reload your shell configuration**
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
source ~/.zshrc
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
#### Verification
|
|
134
|
+
|
|
135
|
+
Confirm NVM is installed correctly:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
nvm --version
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Expected output (version numbers may vary):
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
0.40.1
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Test installing Node.js:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
nvm install --lts
|
|
151
|
+
node --version
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
#### Troubleshooting
|
|
155
|
+
|
|
156
|
+
**Problem**: `nvm: command not found` after installation
|
|
157
|
+
|
|
158
|
+
**Solution**: Ensure the shell configuration was added correctly and the shell was reloaded:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# Verify the configuration exists
|
|
162
|
+
grep -q "NVM_DIR" ~/.zshrc && echo "Config exists" || echo "Config missing"
|
|
163
|
+
|
|
164
|
+
# Reload the shell
|
|
165
|
+
source ~/.zshrc
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Problem**: NVM loads slowly on shell startup
|
|
169
|
+
|
|
170
|
+
**Solution**: Add lazy loading to your shell configuration. Replace the NVM configuration with:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
# Lazy load NVM for faster shell startup
|
|
174
|
+
export NVM_DIR="$HOME/.nvm"
|
|
175
|
+
nvm() {
|
|
176
|
+
unset -f nvm
|
|
177
|
+
[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh"
|
|
178
|
+
nvm "$@"
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**Problem**: Homebrew NVM version differs from official NVM
|
|
183
|
+
|
|
184
|
+
**Solution**: Homebrew may have a slightly different version. If you need the absolute latest version, use the direct install method instead:
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
brew uninstall nvm
|
|
188
|
+
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
### Ubuntu/Debian (APT)
|
|
194
|
+
|
|
195
|
+
#### Prerequisites
|
|
196
|
+
|
|
197
|
+
- Ubuntu 20.04 or later, or Debian 10 or later
|
|
198
|
+
- sudo privileges
|
|
199
|
+
- curl or wget installed
|
|
200
|
+
|
|
201
|
+
NVM is not available in the official Ubuntu/Debian repositories. The installation uses the official NVM install script directly.
|
|
202
|
+
|
|
203
|
+
First, install required dependencies:
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
207
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y curl
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Remove any existing Node.js installation (optional but recommended):
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get remove -y nodejs npm 2>/dev/null || true
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
#### Installation Steps
|
|
217
|
+
|
|
218
|
+
**Step 1: Download and run the NVM install script**
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
This script:
|
|
225
|
+
- Clones the NVM repository to `~/.nvm`
|
|
226
|
+
- Adds NVM initialization to your shell profile (`~/.bashrc`, `~/.zshrc`, or `~/.profile`)
|
|
227
|
+
|
|
228
|
+
**Step 2: Reload your shell configuration**
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
source ~/.bashrc
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
For zsh users:
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
source ~/.zshrc
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
#### Verification
|
|
241
|
+
|
|
242
|
+
Confirm NVM is installed correctly:
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
nvm --version
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
Expected output (version numbers may vary):
|
|
249
|
+
|
|
250
|
+
```
|
|
251
|
+
0.40.3
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
Test installing Node.js:
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
nvm install --lts
|
|
258
|
+
node --version
|
|
259
|
+
npm --version
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
#### Troubleshooting
|
|
263
|
+
|
|
264
|
+
**Problem**: `nvm: command not found` after installation
|
|
265
|
+
|
|
266
|
+
**Solution**: The install script may not have detected your shell profile correctly. Manually add the configuration:
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
cat >> ~/.bashrc << 'EOF'
|
|
270
|
+
|
|
271
|
+
# NVM Configuration
|
|
272
|
+
export NVM_DIR="$HOME/.nvm"
|
|
273
|
+
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
|
|
274
|
+
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
|
|
275
|
+
EOF
|
|
276
|
+
source ~/.bashrc
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
**Problem**: NVM not available in new terminal sessions
|
|
280
|
+
|
|
281
|
+
**Solution**: Ensure `~/.bashrc` is sourced from `~/.bash_profile` for login shells:
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
echo 'source ~/.bashrc' >> ~/.bash_profile
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
**Problem**: Permission denied errors during installation
|
|
288
|
+
|
|
289
|
+
**Solution**: NVM should be installed as a regular user, not with sudo. If you ran the install script with sudo, remove and reinstall:
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
sudo rm -rf ~/.nvm
|
|
293
|
+
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
### Raspberry Pi OS (APT)
|
|
299
|
+
|
|
300
|
+
#### Prerequisites
|
|
301
|
+
|
|
302
|
+
- Raspberry Pi OS (Bookworm, Bullseye, or Buster) - 64-bit or 32-bit
|
|
303
|
+
- Raspberry Pi 2 or later (Pi Zero/1 have limited support - see notes below)
|
|
304
|
+
- sudo privileges
|
|
305
|
+
- curl installed
|
|
306
|
+
|
|
307
|
+
First, verify your architecture:
|
|
308
|
+
|
|
309
|
+
```bash
|
|
310
|
+
uname -m
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
- `aarch64` = 64-bit ARM (Raspberry Pi 3/4/5 with 64-bit OS) - Full support
|
|
314
|
+
- `armv7l` = 32-bit ARM (Raspberry Pi 2/3/4 with 32-bit OS) - Full support
|
|
315
|
+
- `armv6l` = 32-bit ARM (Raspberry Pi Zero/1) - Limited support (see notes)
|
|
316
|
+
|
|
317
|
+
Install required dependencies:
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
321
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y curl
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
#### Installation Steps
|
|
325
|
+
|
|
326
|
+
**Step 1: Download and run the NVM install script**
|
|
327
|
+
|
|
328
|
+
```bash
|
|
329
|
+
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
**Step 2: Reload your shell configuration**
|
|
333
|
+
|
|
334
|
+
```bash
|
|
335
|
+
source ~/.bashrc
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
**Step 3: Install Node.js**
|
|
339
|
+
|
|
340
|
+
For aarch64 and armv7l architectures:
|
|
341
|
+
|
|
342
|
+
```bash
|
|
343
|
+
nvm install --lts
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
For armv6l architecture (Raspberry Pi Zero/1), use unofficial builds:
|
|
347
|
+
|
|
348
|
+
```bash
|
|
349
|
+
NVM_NODEJS_ORG_MIRROR=https://unofficial-builds.nodejs.org/download/release nvm install 20
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
**Note**: Unofficial builds stopped supporting armv6l for Node.js v22+. The maximum supported version on armv6l is Node.js 20.x.
|
|
353
|
+
|
|
354
|
+
#### Verification
|
|
355
|
+
|
|
356
|
+
Confirm NVM is installed correctly:
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
nvm --version
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
Expected output:
|
|
363
|
+
|
|
364
|
+
```
|
|
365
|
+
0.40.3
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
Verify Node.js installation:
|
|
369
|
+
|
|
370
|
+
```bash
|
|
371
|
+
node --version
|
|
372
|
+
npm --version
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
#### Troubleshooting
|
|
376
|
+
|
|
377
|
+
**Problem**: `nvm install` takes a very long time on Raspberry Pi Zero/1
|
|
378
|
+
|
|
379
|
+
**Solution**: On armv6l devices, NVM attempts to compile from source if prebuilt binaries are unavailable. Use the unofficial builds mirror:
|
|
380
|
+
|
|
381
|
+
```bash
|
|
382
|
+
NVM_NODEJS_ORG_MIRROR=https://unofficial-builds.nodejs.org/download/release nvm install 20
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
**Problem**: "There is no 'node' binary for your system" error
|
|
386
|
+
|
|
387
|
+
**Solution**: The requested Node.js version does not have prebuilt binaries for your architecture. Try an older LTS version or use unofficial builds for armv6l.
|
|
388
|
+
|
|
389
|
+
**Problem**: Out of memory during Node.js compilation
|
|
390
|
+
|
|
391
|
+
**Solution**: Add swap space before compiling:
|
|
392
|
+
|
|
393
|
+
```bash
|
|
394
|
+
sudo fallocate -l 2G /swapfile
|
|
395
|
+
sudo chmod 600 /swapfile
|
|
396
|
+
sudo mkswap /swapfile
|
|
397
|
+
sudo swapon /swapfile
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
**Problem**: NVM not found after reboot
|
|
401
|
+
|
|
402
|
+
**Solution**: Ensure the NVM configuration is in `~/.bashrc` and the file is sourced on login:
|
|
403
|
+
|
|
404
|
+
```bash
|
|
405
|
+
cat >> ~/.bashrc << 'EOF'
|
|
406
|
+
|
|
407
|
+
# NVM Configuration
|
|
408
|
+
export NVM_DIR="$HOME/.nvm"
|
|
409
|
+
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
|
410
|
+
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
|
|
411
|
+
EOF
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
---
|
|
415
|
+
|
|
416
|
+
### Amazon Linux (DNF/YUM)
|
|
417
|
+
|
|
418
|
+
#### Prerequisites
|
|
419
|
+
|
|
420
|
+
- Amazon Linux 2023 (AL2023) or Amazon Linux 2 (AL2)
|
|
421
|
+
- sudo privileges (typically ec2-user on EC2 instances)
|
|
422
|
+
- curl installed
|
|
423
|
+
|
|
424
|
+
This is the AWS-recommended method for setting up Node.js on EC2 instances.
|
|
425
|
+
|
|
426
|
+
First, install required dependencies:
|
|
427
|
+
|
|
428
|
+
```bash
|
|
429
|
+
# For Amazon Linux 2023
|
|
430
|
+
sudo dnf install -y curl
|
|
431
|
+
|
|
432
|
+
# For Amazon Linux 2
|
|
433
|
+
sudo yum install -y curl
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
#### Installation Steps
|
|
437
|
+
|
|
438
|
+
**Step 1: Download and run the NVM install script**
|
|
439
|
+
|
|
440
|
+
```bash
|
|
441
|
+
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
**Step 2: Activate NVM in the current session**
|
|
445
|
+
|
|
446
|
+
```bash
|
|
447
|
+
source ~/.bashrc
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
**Step 3: Install Node.js**
|
|
451
|
+
|
|
452
|
+
```bash
|
|
453
|
+
nvm install --lts
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
#### Verification
|
|
457
|
+
|
|
458
|
+
Confirm NVM is installed correctly:
|
|
459
|
+
|
|
460
|
+
```bash
|
|
461
|
+
nvm --version
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
Expected output:
|
|
465
|
+
|
|
466
|
+
```
|
|
467
|
+
0.40.3
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
Verify Node.js installation:
|
|
471
|
+
|
|
472
|
+
```bash
|
|
473
|
+
node --version
|
|
474
|
+
npm --version
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
#### Troubleshooting
|
|
478
|
+
|
|
479
|
+
**Problem**: `nvm: command not found` after running the install script
|
|
480
|
+
|
|
481
|
+
**Solution**: Source your shell profile:
|
|
482
|
+
|
|
483
|
+
```bash
|
|
484
|
+
source ~/.bashrc
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
If that does not work, manually add the configuration:
|
|
488
|
+
|
|
489
|
+
```bash
|
|
490
|
+
cat >> ~/.bashrc << 'EOF'
|
|
491
|
+
|
|
492
|
+
# NVM Configuration
|
|
493
|
+
export NVM_DIR="$HOME/.nvm"
|
|
494
|
+
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
|
495
|
+
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
|
|
496
|
+
EOF
|
|
497
|
+
source ~/.bashrc
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
**Problem**: NVM not available after EC2 instance restart
|
|
501
|
+
|
|
502
|
+
**Solution**: NVM is user-specific. Ensure you are logged in as the same user who installed NVM (typically ec2-user). The installation persists across reboots but requires sourcing the shell profile.
|
|
503
|
+
|
|
504
|
+
**Problem**: Node.js version too old for project requirements
|
|
505
|
+
|
|
506
|
+
**Solution**: Install a specific version:
|
|
507
|
+
|
|
508
|
+
```bash
|
|
509
|
+
nvm install 20
|
|
510
|
+
nvm use 20
|
|
511
|
+
nvm alias default 20
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
**Problem**: Creating an AMI with Node.js pre-installed
|
|
515
|
+
|
|
516
|
+
**Solution**: After installing NVM and Node.js, you can create an AMI from the instance. The AMI will include the NVM installation. Users of the AMI will need to run `source ~/.bashrc` or start a new shell session to access NVM.
|
|
517
|
+
|
|
518
|
+
---
|
|
519
|
+
|
|
520
|
+
### Windows (Chocolatey/winget)
|
|
521
|
+
|
|
522
|
+
#### Prerequisites
|
|
523
|
+
|
|
524
|
+
- Windows 10 version 1809 or later, or Windows 11
|
|
525
|
+
- Administrator PowerShell or Command Prompt
|
|
526
|
+
- Chocolatey or winget package manager installed
|
|
527
|
+
- **No existing Node.js installation** - This is critical on Windows
|
|
528
|
+
|
|
529
|
+
**Critical**: Uninstall any pre-existing Node.js installations before installing nvm-windows. The tool cannot manage existing installations due to Windows security restrictions, and symlinks will not work correctly if another Node.js version is in your PATH.
|
|
530
|
+
|
|
531
|
+
To remove existing Node.js:
|
|
532
|
+
|
|
533
|
+
1. Open "Add or Remove Programs" from Windows Settings
|
|
534
|
+
2. Search for "Node.js" and uninstall any found installations
|
|
535
|
+
3. Delete any remaining Node.js directories (e.g., `C:\Program Files\nodejs`)
|
|
536
|
+
4. Remove Node.js from your PATH environment variable if present
|
|
537
|
+
|
|
538
|
+
If Chocolatey is not installed, install it first by running this command in an Administrator PowerShell:
|
|
539
|
+
|
|
540
|
+
```powershell
|
|
541
|
+
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
#### Installation Steps (Chocolatey)
|
|
545
|
+
|
|
546
|
+
Run the following command in an Administrator PowerShell or Command Prompt:
|
|
547
|
+
|
|
548
|
+
```powershell
|
|
549
|
+
choco install nvm -y
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
The `-y` flag automatically confirms all prompts, enabling fully non-interactive installation.
|
|
553
|
+
|
|
554
|
+
**Note**: Close and reopen your terminal after installation to ensure PATH changes take effect.
|
|
555
|
+
|
|
556
|
+
#### Installation Steps (winget)
|
|
557
|
+
|
|
558
|
+
Run the following command in an Administrator PowerShell or Command Prompt:
|
|
559
|
+
|
|
560
|
+
```powershell
|
|
561
|
+
winget install --id CoreyButler.NVMforWindows --silent --accept-package-agreements --accept-source-agreements
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
**Note**: Close and reopen your terminal after installation to ensure PATH changes take effect.
|
|
565
|
+
|
|
566
|
+
#### Post-Installation: Install Node.js
|
|
567
|
+
|
|
568
|
+
Open a new Administrator PowerShell or Command Prompt:
|
|
569
|
+
|
|
570
|
+
```powershell
|
|
571
|
+
nvm install lts
|
|
572
|
+
nvm use lts
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
**Important**: Running `nvm install` and `nvm use` requires Administrator privileges because nvm-windows creates symlinks.
|
|
576
|
+
|
|
577
|
+
#### Verification
|
|
578
|
+
|
|
579
|
+
Open a new terminal window, then run:
|
|
580
|
+
|
|
581
|
+
```powershell
|
|
582
|
+
nvm version
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
Expected output (version numbers may vary):
|
|
586
|
+
|
|
587
|
+
```
|
|
588
|
+
1.2.2
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
Verify Node.js installation:
|
|
592
|
+
|
|
593
|
+
```powershell
|
|
594
|
+
node --version
|
|
595
|
+
npm --version
|
|
596
|
+
```
|
|
597
|
+
|
|
598
|
+
#### Troubleshooting
|
|
599
|
+
|
|
600
|
+
**Problem**: `nvm` command not found after installation
|
|
601
|
+
|
|
602
|
+
**Solution**: Close all terminal windows and open a new one. The PATH is updated during installation but existing terminals do not pick up the change.
|
|
603
|
+
|
|
604
|
+
**Problem**: `nvm use` appears to work but Node.js version does not change
|
|
605
|
+
|
|
606
|
+
**Solution**: Another Node.js installation may be taking precedence in your PATH. Verify no other Node.js installations exist:
|
|
607
|
+
|
|
608
|
+
```powershell
|
|
609
|
+
where node
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
If multiple paths are shown, remove the non-NVM installations.
|
|
613
|
+
|
|
614
|
+
**Problem**: "Access is denied" or "symlink privilege not held" error
|
|
615
|
+
|
|
616
|
+
**Solution**: Run your terminal as Administrator. NVM-windows requires Administrator privileges to create symlinks.
|
|
617
|
+
|
|
618
|
+
**Problem**: npm global packages not available after switching Node.js versions
|
|
619
|
+
|
|
620
|
+
**Solution**: Global packages are installed per Node.js version. Reinstall global packages for each version:
|
|
621
|
+
|
|
622
|
+
```powershell
|
|
623
|
+
nvm use 20
|
|
624
|
+
npm install -g yarn typescript
|
|
625
|
+
```
|
|
626
|
+
|
|
627
|
+
**Problem**: Installation fails with antivirus interference
|
|
628
|
+
|
|
629
|
+
**Solution**: Temporarily disable antivirus or add nvm-windows to the exclusion list. Some antivirus software flags the symlink operations.
|
|
630
|
+
|
|
631
|
+
---
|
|
632
|
+
|
|
633
|
+
### WSL (Ubuntu)
|
|
634
|
+
|
|
635
|
+
#### Prerequisites
|
|
636
|
+
|
|
637
|
+
- Windows 10 version 2004 or higher, or Windows 11
|
|
638
|
+
- WSL 2 enabled with Ubuntu distribution installed
|
|
639
|
+
- sudo privileges within WSL
|
|
640
|
+
|
|
641
|
+
WSL runs a full Linux environment, so NVM installation follows the standard Linux procedure.
|
|
642
|
+
|
|
643
|
+
Install required dependencies:
|
|
644
|
+
|
|
645
|
+
```bash
|
|
646
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
647
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y curl
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
#### Installation Steps
|
|
651
|
+
|
|
652
|
+
**Step 1: Download and run the NVM install script**
|
|
653
|
+
|
|
654
|
+
```bash
|
|
655
|
+
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
|
|
656
|
+
```
|
|
657
|
+
|
|
658
|
+
**Step 2: Reload your shell configuration**
|
|
659
|
+
|
|
660
|
+
```bash
|
|
661
|
+
source ~/.bashrc
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
**Step 3: Install Node.js**
|
|
665
|
+
|
|
666
|
+
```bash
|
|
667
|
+
nvm install --lts
|
|
668
|
+
```
|
|
669
|
+
|
|
670
|
+
#### Verification
|
|
671
|
+
|
|
672
|
+
Confirm NVM is installed correctly:
|
|
673
|
+
|
|
674
|
+
```bash
|
|
675
|
+
nvm --version
|
|
676
|
+
```
|
|
677
|
+
|
|
678
|
+
Expected output:
|
|
679
|
+
|
|
680
|
+
```
|
|
681
|
+
0.40.3
|
|
682
|
+
```
|
|
683
|
+
|
|
684
|
+
Verify Node.js installation:
|
|
685
|
+
|
|
686
|
+
```bash
|
|
687
|
+
node --version
|
|
688
|
+
npm --version
|
|
689
|
+
```
|
|
690
|
+
|
|
691
|
+
#### Troubleshooting
|
|
692
|
+
|
|
693
|
+
**Problem**: `nvm: command not found` in WSL
|
|
694
|
+
|
|
695
|
+
**Solution**: The install script may not have updated your profile. Manually add the configuration:
|
|
696
|
+
|
|
697
|
+
```bash
|
|
698
|
+
cat >> ~/.bashrc << 'EOF'
|
|
699
|
+
|
|
700
|
+
# NVM Configuration
|
|
701
|
+
export NVM_DIR="$HOME/.nvm"
|
|
702
|
+
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
|
703
|
+
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
|
|
704
|
+
EOF
|
|
705
|
+
source ~/.bashrc
|
|
706
|
+
```
|
|
707
|
+
|
|
708
|
+
**Problem**: NVM works in WSL but not in Windows terminal
|
|
709
|
+
|
|
710
|
+
**Solution**: NVM installed in WSL is only available within WSL. For Windows terminals (PowerShell, Command Prompt), install nvm-windows separately (see Windows section).
|
|
711
|
+
|
|
712
|
+
**Problem**: Different Node.js versions in WSL vs Windows
|
|
713
|
+
|
|
714
|
+
**Solution**: WSL and Windows maintain separate environments. If you need the same Node.js version in both:
|
|
715
|
+
|
|
716
|
+
1. In WSL: `nvm install 20 && nvm use 20`
|
|
717
|
+
2. In Windows (nvm-windows): `nvm install 20 && nvm use 20`
|
|
718
|
+
|
|
719
|
+
**Problem**: File permission issues when accessing Windows files from WSL
|
|
720
|
+
|
|
721
|
+
**Solution**: When working with files on the Windows filesystem (`/mnt/c/...`), Node.js may have permission issues. Store your projects in the Linux filesystem (`~/projects/`) for best performance and compatibility.
|
|
722
|
+
|
|
723
|
+
---
|
|
724
|
+
|
|
725
|
+
### Git Bash (Windows nvm-windows)
|
|
726
|
+
|
|
727
|
+
#### Prerequisites
|
|
728
|
+
|
|
729
|
+
- Windows 10 or Windows 11 (64-bit)
|
|
730
|
+
- Git Bash installed (comes with Git for Windows)
|
|
731
|
+
- Administrator privileges for installation
|
|
732
|
+
- **No existing Node.js installation**
|
|
733
|
+
|
|
734
|
+
**Note**: Git Bash on Windows runs in a MinGW environment that inherits the Windows PATH. Once nvm-windows is installed via Chocolatey or winget, the `nvm` and `node` commands are automatically available in Git Bash.
|
|
735
|
+
|
|
736
|
+
#### Installation Steps
|
|
737
|
+
|
|
738
|
+
**Step 1: Install nvm-windows using Chocolatey**
|
|
739
|
+
|
|
740
|
+
Open an Administrator PowerShell or Command Prompt (not Git Bash) and run:
|
|
741
|
+
|
|
742
|
+
```powershell
|
|
743
|
+
choco install nvm -y
|
|
744
|
+
```
|
|
745
|
+
|
|
746
|
+
**Step 2: Close all terminal windows and open Git Bash**
|
|
747
|
+
|
|
748
|
+
The PATH updates require a fresh terminal session.
|
|
749
|
+
|
|
750
|
+
**Step 3: Install Node.js**
|
|
751
|
+
|
|
752
|
+
In Git Bash (running as Administrator):
|
|
753
|
+
|
|
754
|
+
```bash
|
|
755
|
+
nvm install lts
|
|
756
|
+
nvm use lts
|
|
757
|
+
```
|
|
758
|
+
|
|
759
|
+
**Note**: To run Git Bash as Administrator, right-click the Git Bash shortcut and select "Run as administrator".
|
|
760
|
+
|
|
761
|
+
#### Verification
|
|
762
|
+
|
|
763
|
+
In Git Bash, confirm nvm-windows is accessible:
|
|
764
|
+
|
|
765
|
+
```bash
|
|
766
|
+
nvm version
|
|
767
|
+
```
|
|
768
|
+
|
|
769
|
+
Expected output:
|
|
770
|
+
|
|
771
|
+
```
|
|
772
|
+
1.2.2
|
|
773
|
+
```
|
|
774
|
+
|
|
775
|
+
Verify Node.js installation:
|
|
776
|
+
|
|
777
|
+
```bash
|
|
778
|
+
node --version
|
|
779
|
+
npm --version
|
|
780
|
+
```
|
|
781
|
+
|
|
782
|
+
#### Troubleshooting
|
|
783
|
+
|
|
784
|
+
**Problem**: `nvm: command not found` in Git Bash
|
|
785
|
+
|
|
786
|
+
**Solution**: Git Bash inherits the Windows PATH. Ensure nvm-windows is installed correctly:
|
|
787
|
+
|
|
788
|
+
```bash
|
|
789
|
+
# Check if nvm is in PATH
|
|
790
|
+
echo $PATH | tr ':' '\n' | grep -i nvm
|
|
791
|
+
```
|
|
792
|
+
|
|
793
|
+
If nvm is not in PATH, close Git Bash and all other terminals, then reopen Git Bash.
|
|
794
|
+
|
|
795
|
+
**Problem**: `nvm use` requires Administrator privileges
|
|
796
|
+
|
|
797
|
+
**Solution**: Git Bash must be run as Administrator for `nvm use` commands because symlink creation requires elevated privileges. Right-click the Git Bash shortcut and select "Run as administrator".
|
|
798
|
+
|
|
799
|
+
**Problem**: MinGW path translation issues
|
|
800
|
+
|
|
801
|
+
**Solution**: Git Bash's MinGW layer can translate paths unexpectedly. If you encounter path issues, use the `MSYS_NO_PATHCONV` environment variable:
|
|
802
|
+
|
|
803
|
+
```bash
|
|
804
|
+
MSYS_NO_PATHCONV=1 node /c/path/to/script.js
|
|
805
|
+
```
|
|
806
|
+
|
|
807
|
+
**Problem**: TTY-related errors when running interactive Node.js scripts
|
|
808
|
+
|
|
809
|
+
**Solution**: Git Bash's mintty terminal has TTY compatibility issues. Use `winpty` prefix:
|
|
810
|
+
|
|
811
|
+
```bash
|
|
812
|
+
winpty node
|
|
813
|
+
```
|
|
814
|
+
|
|
815
|
+
Or add an alias to your `~/.bashrc`:
|
|
816
|
+
|
|
817
|
+
```bash
|
|
818
|
+
echo 'alias node="winpty node"' >> ~/.bashrc
|
|
819
|
+
source ~/.bashrc
|
|
820
|
+
```
|
|
821
|
+
|
|
822
|
+
---
|
|
823
|
+
|
|
824
|
+
## Post-Installation Configuration
|
|
825
|
+
|
|
826
|
+
After installing NVM on any platform, consider these common configurations.
|
|
827
|
+
|
|
828
|
+
### Setting a Default Node.js Version
|
|
829
|
+
|
|
830
|
+
Set a default Node.js version that will be active in all new shells:
|
|
831
|
+
|
|
832
|
+
```bash
|
|
833
|
+
nvm alias default 20
|
|
834
|
+
```
|
|
835
|
+
|
|
836
|
+
Or use the latest LTS:
|
|
837
|
+
|
|
838
|
+
```bash
|
|
839
|
+
nvm alias default lts/*
|
|
840
|
+
```
|
|
841
|
+
|
|
842
|
+
### Automatic Version Switching with .nvmrc
|
|
843
|
+
|
|
844
|
+
Create a `.nvmrc` file in your project root to specify the Node.js version:
|
|
845
|
+
|
|
846
|
+
```bash
|
|
847
|
+
echo "20" > .nvmrc
|
|
848
|
+
```
|
|
849
|
+
|
|
850
|
+
Then switch to that version:
|
|
851
|
+
|
|
852
|
+
```bash
|
|
853
|
+
nvm use
|
|
854
|
+
```
|
|
855
|
+
|
|
856
|
+
To automatically switch versions when entering a directory, add this to your `~/.bashrc` or `~/.zshrc`:
|
|
857
|
+
|
|
858
|
+
```bash
|
|
859
|
+
# Automatically switch Node.js version based on .nvmrc
|
|
860
|
+
autoload -U add-zsh-hook
|
|
861
|
+
load-nvmrc() {
|
|
862
|
+
local nvmrc_path="$(nvm_find_nvmrc)"
|
|
863
|
+
if [ -n "$nvmrc_path" ]; then
|
|
864
|
+
local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
|
|
865
|
+
if [ "$nvmrc_node_version" = "N/A" ]; then
|
|
866
|
+
nvm install
|
|
867
|
+
elif [ "$nvmrc_node_version" != "$(nvm version)" ]; then
|
|
868
|
+
nvm use
|
|
869
|
+
fi
|
|
870
|
+
fi
|
|
871
|
+
}
|
|
872
|
+
add-zsh-hook chpwd load-nvmrc
|
|
873
|
+
load-nvmrc
|
|
874
|
+
```
|
|
875
|
+
|
|
876
|
+
### Installing Global Packages
|
|
877
|
+
|
|
878
|
+
Global packages are installed per Node.js version. To reinstall global packages when installing a new Node.js version:
|
|
879
|
+
|
|
880
|
+
```bash
|
|
881
|
+
nvm install 22 --reinstall-packages-from=20
|
|
882
|
+
```
|
|
883
|
+
|
|
884
|
+
### Listing Installed Versions
|
|
885
|
+
|
|
886
|
+
View all installed Node.js versions:
|
|
887
|
+
|
|
888
|
+
```bash
|
|
889
|
+
nvm ls
|
|
890
|
+
```
|
|
891
|
+
|
|
892
|
+
View all available versions for installation:
|
|
893
|
+
|
|
894
|
+
```bash
|
|
895
|
+
nvm ls-remote --lts
|
|
896
|
+
```
|
|
897
|
+
|
|
898
|
+
### Uninstalling a Node.js Version
|
|
899
|
+
|
|
900
|
+
Remove a specific version:
|
|
901
|
+
|
|
902
|
+
```bash
|
|
903
|
+
nvm uninstall 18
|
|
904
|
+
```
|
|
905
|
+
|
|
906
|
+
---
|
|
907
|
+
|
|
908
|
+
## Common Issues
|
|
909
|
+
|
|
910
|
+
### Issue: "nvm: command not found"
|
|
911
|
+
|
|
912
|
+
**Symptoms**: After installation, `nvm` command is not recognized.
|
|
913
|
+
|
|
914
|
+
**Solutions**:
|
|
915
|
+
|
|
916
|
+
1. Reload your shell configuration:
|
|
917
|
+
|
|
918
|
+
```bash
|
|
919
|
+
# For bash
|
|
920
|
+
source ~/.bashrc
|
|
921
|
+
|
|
922
|
+
# For zsh
|
|
923
|
+
source ~/.zshrc
|
|
924
|
+
```
|
|
925
|
+
|
|
926
|
+
2. Open a new terminal window
|
|
927
|
+
|
|
928
|
+
3. Verify NVM is configured in your profile:
|
|
929
|
+
|
|
930
|
+
```bash
|
|
931
|
+
grep NVM_DIR ~/.bashrc ~/.zshrc ~/.profile 2>/dev/null
|
|
932
|
+
```
|
|
933
|
+
|
|
934
|
+
4. If missing, manually add the configuration (see platform-specific sections)
|
|
935
|
+
|
|
936
|
+
### Issue: Node.js Version Not Changing
|
|
937
|
+
|
|
938
|
+
**Symptoms**: `nvm use` runs without error but `node --version` shows the old version.
|
|
939
|
+
|
|
940
|
+
**Solutions**:
|
|
941
|
+
|
|
942
|
+
- **Unix/Linux/macOS**: Check for system-installed Node.js taking precedence:
|
|
943
|
+
|
|
944
|
+
```bash
|
|
945
|
+
which node
|
|
946
|
+
```
|
|
947
|
+
|
|
948
|
+
If the path is not `~/.nvm/versions/node/...`, remove the system installation.
|
|
949
|
+
|
|
950
|
+
- **Windows**: Ensure no other Node.js installations exist:
|
|
951
|
+
|
|
952
|
+
```powershell
|
|
953
|
+
where node
|
|
954
|
+
```
|
|
955
|
+
|
|
956
|
+
### Issue: Permission Denied on Linux/macOS
|
|
957
|
+
|
|
958
|
+
**Symptoms**: Cannot install Node.js versions or access NVM directory.
|
|
959
|
+
|
|
960
|
+
**Solutions**:
|
|
961
|
+
|
|
962
|
+
- NVM should never be installed with sudo. The `~/.nvm` directory should be owned by your user:
|
|
963
|
+
|
|
964
|
+
```bash
|
|
965
|
+
ls -la ~/.nvm
|
|
966
|
+
```
|
|
967
|
+
|
|
968
|
+
If owned by root, fix ownership:
|
|
969
|
+
|
|
970
|
+
```bash
|
|
971
|
+
sudo chown -R $USER:$USER ~/.nvm
|
|
972
|
+
```
|
|
973
|
+
|
|
974
|
+
### Issue: NVM Slows Down Shell Startup
|
|
975
|
+
|
|
976
|
+
**Symptoms**: Opening a new terminal takes several seconds.
|
|
977
|
+
|
|
978
|
+
**Solutions**:
|
|
979
|
+
|
|
980
|
+
Use lazy loading - NVM will only initialize when first invoked:
|
|
981
|
+
|
|
982
|
+
```bash
|
|
983
|
+
# Add to ~/.bashrc or ~/.zshrc instead of default NVM config
|
|
984
|
+
export NVM_DIR="$HOME/.nvm"
|
|
985
|
+
nvm() {
|
|
986
|
+
unset -f nvm node npm npx
|
|
987
|
+
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
|
988
|
+
nvm "$@"
|
|
989
|
+
}
|
|
990
|
+
node() {
|
|
991
|
+
unset -f nvm node npm npx
|
|
992
|
+
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
|
993
|
+
node "$@"
|
|
994
|
+
}
|
|
995
|
+
npm() {
|
|
996
|
+
unset -f nvm node npm npx
|
|
997
|
+
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
|
998
|
+
npm "$@"
|
|
999
|
+
}
|
|
1000
|
+
npx() {
|
|
1001
|
+
unset -f nvm node npm npx
|
|
1002
|
+
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
|
1003
|
+
npx "$@"
|
|
1004
|
+
}
|
|
1005
|
+
```
|
|
1006
|
+
|
|
1007
|
+
### Issue: Cannot Find Node.js Binary in Scripts
|
|
1008
|
+
|
|
1009
|
+
**Symptoms**: Scripts or cron jobs cannot find the `node` command.
|
|
1010
|
+
|
|
1011
|
+
**Solutions**:
|
|
1012
|
+
|
|
1013
|
+
Use the full path to the Node.js binary:
|
|
1014
|
+
|
|
1015
|
+
```bash
|
|
1016
|
+
~/.nvm/versions/node/v20.10.0/bin/node script.js
|
|
1017
|
+
```
|
|
1018
|
+
|
|
1019
|
+
Or source NVM in your script:
|
|
1020
|
+
|
|
1021
|
+
```bash
|
|
1022
|
+
#!/bin/bash
|
|
1023
|
+
export NVM_DIR="$HOME/.nvm"
|
|
1024
|
+
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
|
1025
|
+
node script.js
|
|
1026
|
+
```
|
|
1027
|
+
|
|
1028
|
+
### Issue: Global Packages Missing After Version Switch
|
|
1029
|
+
|
|
1030
|
+
**Symptoms**: Global packages like `yarn`, `typescript`, etc. are not available after switching Node.js versions.
|
|
1031
|
+
|
|
1032
|
+
**Solutions**:
|
|
1033
|
+
|
|
1034
|
+
Global packages are installed per Node.js version. Reinstall them for the new version:
|
|
1035
|
+
|
|
1036
|
+
```bash
|
|
1037
|
+
npm install -g yarn typescript eslint
|
|
1038
|
+
```
|
|
1039
|
+
|
|
1040
|
+
Or install a new version with packages from another version:
|
|
1041
|
+
|
|
1042
|
+
```bash
|
|
1043
|
+
nvm install 22 --reinstall-packages-from=20
|
|
1044
|
+
```
|
|
1045
|
+
|
|
1046
|
+
---
|
|
1047
|
+
|
|
1048
|
+
## References
|
|
1049
|
+
|
|
1050
|
+
- [NVM (nvm-sh) Official Repository](https://github.com/nvm-sh/nvm)
|
|
1051
|
+
- [NVM-Windows Official Repository](https://github.com/coreybutler/nvm-windows)
|
|
1052
|
+
- [NVM Homebrew Formula](https://formulae.brew.sh/formula/nvm)
|
|
1053
|
+
- [NVM Chocolatey Package](https://community.chocolatey.org/packages/nvm)
|
|
1054
|
+
- [NVM-Windows winget Package](https://winget.run/pkg/CoreyButler/NVMforWindows)
|
|
1055
|
+
- [AWS Documentation: Setting Up Node.js on EC2](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/setting-up-node-on-ec2-instance.html)
|
|
1056
|
+
- [Node.js Unofficial Builds (for ARMv6)](https://unofficial-builds.nodejs.org/download/release/)
|
|
1057
|
+
- [Microsoft Learn: Set up Node.js on Windows](https://learn.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-windows)
|