15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало
08.10.2024

Как да инсталирате NVM за Node.js на Ubuntu: Пълно техническо ръководство

NVM (Node Version Manager) е POSIX-съвместим шел скрипт, който инсталира и управлява множество изолирани Node.js среди за изпълнение на една машина, без да изисква root привилегии или промяна на системните пътища. Всяка версия на Node.js се съхранява в собствена директория под `~/.nvm/versions/node/`, осигурявайки пълна, безконфликтна изолация между проектите.

Това ръководство описва инсталация на NVM от производствен клас на Ubuntu (20.04, 22.04 и 24.04), обхващайки не само основните команди, но и специфичните случаи с шел профилите, автоматизацията на работния процес с `.nvmrc`, миграцията на глобални пакети и специфичните за сървъра проблеми, които повечето уроци пропускат.

Защо NVM вместо системния мениджър на пакети

Инсталирането на Node.js чрез `apt` поставя единичен, системно-широк двоичен файл на `/usr/bin/node`. Надграждането му засяга едновременно всички приложения на хоста. На споделена машина за разработка или VPS, изпълняващ множество Node.js проекти, това създава нестабилни, трудно възпроизводими среди.

NVM решава това, като инсталира всяка версия на Node.js в директория в потребителското пространство и манипулира `PATH` на ниво шел. Резултатът е контрол на версиите на ниво потребител и проект без никакво въздействие върху състоянието на пакетите на операционната система.

NVM срещу други мениджъри на версии на Node.js

ФункцияNVMfnmVoltan
ЕзикShell (Bash/Zsh)RustRustShell
СкоростУмеренаМного бързаМного бързаБърза
Поддръжка на `.nvmrc`ДаДаЧастичнаНе
Фиксиране на версия за проектДаДаДаНе
Поддръжка на WindowsНе (само WSL)ДаДаНе
Изолация на глобални пакетиДаДаДаНе
Натоварване при стартиране на шела~70ms~5ms~5msМинимално
Зрялост / екосистемаНай-високаВисокаСреднаВисока

NVM остава най-широко документираната и поддържана от екосистемата опция, което я прави най-сигурният избор по подразбиране за екипи и сървърни среди, където възпроизводимостта е по-важна от скоростта на стартиране.

Предварителни изисквания

  • Ubuntu 20.04, 22.04 или 24.04 (десктоп или сървър)
  • Потребителски акаунт без root с привилегии `sudo`
  • Инсталиран `curl` или `wget` (и двата са налични по подразбиране в повечето Ubuntu образи)
  • Основни познания за Bash или Zsh

За да потвърдите вашия шел и версията на Ubuntu преди да започнете:

“`bash

echo $SHELL

lsb_release -a

“`

Стъпка 1: Актуализирайте индекса на системните пакети

Обновете списъците с пакети на APT, за да сте сигурни, че всички зависимости, разрешени по време на сесията, са актуални:

“`bash

sudo apt-get update && sudo apt-get upgrade -y

“`

Потвърдете също, че `curl` е наличен:

“`bash

curl –version || sudo apt-get install -y curl

“`

Стъпка 2: Изтеглете и стартирайте инсталационния скрипт на NVM

Официалният инсталатор на NVM се хоства в GitHub. Той клонира хранилището на NVM в `~/.nvm` и добавя необходимия блок за инициализация на шела към вашия профилен файл.

Вариант A — Използване на curl (препоръчително):

“`bash

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

“`

Вариант B — Използване на wget:

“`bash

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

“`

Винаги проверявайте последния таг на версията на страницата с версии на NVM в GitHub преди стартиране. Заменете `v0.40.1` с текущия стабилен таг, ако е публикувана по-нова версия.

Какво всъщност прави инсталаторът:

  1. Клонира хранилището на NVM в `~/.nvm`
  2. Открива активния ви шел (`bash`, `zsh`, `ksh` или `fish`)
  3. Добавя следния блок за инициализация към съответния профилен файл (`~/.bashrc`, `~/.zshrc`, `~/.profile` или `~/.bash_profile`)

“`bash

export NVM_DIR="$HOME/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"

“`

Бележка за сигурността: Пренасочването на отдалечен скрипт директно към `bash` е често срещан модел, но носи присъщ риск. За производствени сървъри или среди с dedicated server, изтеглете скрипта първо, прегледайте го, след което го изпълнете:

“`bash

curl -o install_nvm.sh https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh

cat install_nvm.sh # review before running

bash install_nvm.sh

“`

Стъпка 3: Активирайте NVM в текущата шел сесия

Инсталаторът променя вашия профил, но тези промени влизат в сила само в нови шел сесии. За да активирате NVM незабавно, без да отваряте нов терминал:

За Bash:

“`bash

source ~/.bashrc

“`

За Zsh:

“`bash

source ~/.zshrc

“`

Ръчно зареждане (работи във всеки шел):

“`bash

export NVM_DIR="$HOME/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

“`

Често срещан проблем: Профилният файл не се зарежда в неинтерактивни шелове

В Ubuntu `~/.bashrc` се зарежда само за интерактивни нелогин шелове. Ако се свързвате чрез SSH (логин шел), Bash чете `~/.bash_profile` или `~/.profile` вместо това. Ако NVM не се открива след SSH вход, добавете блока за зареждане към `~/.bash_profile`:

“`bash

echo 'source ~/.bashrc' >> ~/.bash_profile

source ~/.bash_profile

“`

Това е един от най-често срещаните проблеми при конфигуриране на NVM на отдалечени сървъри.

Стъпка 4: Проверете инсталацията на NVM

“`bash

nvm –version

“`

Очакван изход (номерът на версията ще варира):

“`

0.40.1

“`

Ако командата върне `nvm: command not found`, профилът на шела не е зареден правилно. Изпълнете отново командата за зареждане от Стъпка 3 и проверете дали блокът за инициализация съществува във вашия профилен файл:

“`bash

grep -n 'NVM_DIR' ~/.bashrc

“`

Стъпка 5: Инсталирайте Node.js с NVM

Инсталирайте последната LTS версия (препоръчително за производство)

“`bash

nvm install –lts

“`

Флагът `–lts` инсталира най-новата версия с дългосрочна поддръжка, която получава корекции за сигурност в продължение на 30 месеца. За производствени натоварвания на VPS с cPanel или всяка сървърна среда, LTS е силно предпочитана пред текущата версия.

Инсталирайте абсолютно последната версия

“`bash

nvm install node

“`

Инсталирайте конкретна версия

“`bash

nvm install 20.14.0

“`

Изведете списък с всички налични отдалечени версии

“`bash

nvm ls-remote

“`

За филтриране само на LTS версии:

“`bash

nvm ls-remote –lts

“`

Стъпка 6: Проверете активните версии на Node.js и npm

“`bash

node -v

npm -v

“`

Потвърдете също пътя до двоичния файл, за да сте сигурни, че не използвате случайно системно-широка инсталация на Node.js:

“`bash

which node

Expected: /home/<username>/.nvm/versions/node/v20.14.0/bin/node

“`

Стъпка 7: Управлявайте множество версии на Node.js

Изведете списък с всички локално инсталирани версии

“`bash

nvm ls

“`

Примерен изход:

“`

-> v20.14.0

v18.20.3

v16.20.2

default -> lts/* (-> v20.14.0)

node -> stable (-> v20.14.0) (default)

lts/* -> lts/iron (-> v20.14.0)

“`

Превключване между версии

“`bash

nvm use 18.20.3

“`

Тази промяна се прилага само за текущата терминална сесия. Отварянето на нов терминал се връща към псевдонима по подразбиране.

Проверете коя версия е активна в момента

“`bash

nvm current

“`

Стъпка 8: Задайте постоянна версия на Node.js по подразбиране

За да направите конкретна версия по подразбиране за всички нови шел сесии:

“`bash

nvm alias default 20.14.0

“`

Можете също да зададете псевдоним към линия на версията вместо конкретна пач версия, което автоматично проследява актуализациите в тази линия:

“`bash

nvm alias default lts/*

“`

Стъпка 9: Автоматизирайте превключването на версии с `.nvmrc`

Това е една от най-мощните и недостатъчно използвани функции на NVM. Поставете файл `.nvmrc` в основната директория на вашия проект, съдържащ необходимата версия на Node.js:

“`bash

echo "20.14.0" > /path/to/your/project/.nvmrc

“`

След това, когато влезете в тази директория с `cd`:

“`bash

nvm use

Found '/path/to/your/project/.nvmrc' with version <20.14.0>

Now using node v20.14.0

“`

Автоматично превключване на версията при смяна на директория

Добавете следното към вашия `~/.bashrc` (или `~/.zshrc`), за да задействате `nvm use` автоматично всеки път, когато влезете в директория, съдържаща файл `.nvmrc`:

За Bash:

“`bash

cdnvm() {

command cd "$@" || return $?

nvm_path="$(nvm_find_up .nvmrc | command tr -d 'n')"

if [[ ! $nvm_path = *[^[:space:]]* ]]; then

declare default_version

default_version="$(nvm version default)"

if [[ $default_version == "N/A" ]]; then

nvm use default

elif [[ $(nvm current) != "$default_version" ]]; then

nvm use default

fi

elif [[ -r "$nvm_path/.nvmrc" && -r "$nvm_path" ]]; then

declare nvm_version

nvm_version=$(<"$nvm_path/.nvmrc")

declare locally_resolved_nvm_version

locally_resolved_nvm_version="$(nvm ls –no-colors "$nvm_version" | command tail -1 | command tr -d '->*' | command tr -d '[:space:]')"

if [[ "$locally_resolved_nvm_version" == "N/A" ]]; then

nvm install "$nvm_version"

elif [[ $(nvm current) != "$locally_resolved_nvm_version" ]]; then

nvm use "$nvm_version"

fi

fi

}

alias cd='cdnvm'

“`

Този модел е особено ценен в CI/CD конвейери и екипни среди, където множество разработчици работят по проекти с различни изисквания за среда за изпълнение.

Стъпка 10: Управлявайте глобалните npm пакети между версиите

Всяка версия на Node.js, инсталирана от NVM, има собствена изолирана директория `node_modules` за глобално инсталирани пакети. Това означава, че инструменти като `pm2`, `yarn` или `typescript`, инсталирани глобално под `v18`, не са достъпни под `v20`.

Инсталирайте глобален пакет за активната версия

“`bash

npm install -g yarn

npm install -g pm2

npm install -g typescript

“`

Мигрирайте глобални пакети при инсталиране на нова версия

NVM предоставя вграден флаг за копиране на всички глобални пакети от една версия към нова инсталация:

“`bash

nvm install 20.14.0 –reinstall-packages-from=18.20.3

“`

Това е от решаващо значение при надграждане на версии на Node.js на сървър, изпълняващ постоянни процеси, управлявани от PM2 или подобни инструменти.

Изведете списък с глобално инсталираните пакети за текущата версия

“`bash

npm list -g –depth=0

“`

Стъпка 11: Деинсталирайте версия на Node.js

Преди деинсталиране превключете от версията, която искате да премахнете:

“`bash

nvm use 20.14.0

nvm uninstall 16.20.2

“`

Не можете да деинсталирате текущо активната версия. Опитът за това връща грешка.

Разширено: Използване на NVM в неинтерактивни среди (CI/CD, Cron, Systemd)

NVM разчита на файлове за инициализация на шела, които не се зареждат в неинтерактивни шелове. Това причинява грешки `node: command not found` в cron задачи, systemd unit файлове и някои CI среди.

Решение 1: Използвайте пълния път до двоичния файл

“`bash

/home/username/.nvm/versions/node/v20.14.0/bin/node /path/to/app.js

“`

Решение 2: Заредете NVM изрично в скриптове

“`bash

#!/bin/bash

export NVM_DIR="$HOME/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

nvm use 20.14.0

node /path/to/app.js

“`

Решение 3: Създайте символна връзка за системно-широк достъп (използвайте с внимание)

“`bash

sudo ln -s /home/username/.nvm/versions/node/v20.14.0/bin/node /usr/local/bin/node

“`

Този подход жертва изолацията на ниво потребител, но понякога е необходим за systemd услуги, изпълнявани като специален потребител на услугата.

NVM на споделен хостинг срещу VPS срещу dedicated сървъри

СредаПригодност на NVMБележки
Споделен хостингНе се поддържаБез достъп до шел; използвайте Node.js, предоставен от платформата
[VPS Хостинг](https://alexhost.com/bg/vps/)ОтличенПълен достъп до шел; изолацията на ниво потребител работи перфектно
[Dedicated Сървъри](https://alexhost.com/bg/dedicated-servers/)ОтличенИдеален за среди с множество проекти и CI runner-и
Docker контейнериЧастичнаОбмислете използването на официални Docker образи на Node.js вместо това
Споделен уеб хостингНе се поддържаБез SSH достъп в повечето конфигурации

За екипи, изпълняващи Node.js приложения заедно с други услуги, един VPS ви дава контрола на ниво шел, който NVM изисква, без натоварването от управление на физически хардуер.

Практически контролен списък с ключови изводи

Използвайте го като справочник за внедряване и конфигуриране:

  • Проверете типа на шела (`echo $SHELL`) преди инсталиране — Zsh и Bash изискват различни профилни файлове
  • Винаги използвайте `–lts` за производствени инсталации на Node.js; запазете `node` (latest) за експериментална работа
  • Добавете `.nvmrc` към контрола на версиите, за да може всеки член на екипа и CI runner да използва идентична версия на средата за изпълнение
  • Използвайте `–reinstall-packages-from` при надграждане на версии на Node.js, за да избегнете ръчното преинсталиране на глобални инструменти
  • Заредете NVM изрично във всеки неинтерактивен скрипт (cron, systemd, CI конвейери) — никога не приемайте, че профилът на шела е бил зареден
  • Проверявайте глобалните пакети за всяка версия с `npm list -g –depth=0` след превключване на версии, за да откривате липсващи зависимости навреме
  • Фиксирайте точни версии в `.nvmrc` (напр. `20.14.0`) вместо псевдоними (напр. `lts`) за максимална възпроизводимост в производство
  • Проверявайте `which node` след превключване на версии, за да потвърдите, че не използвате случайно системно инсталиран двоичен файл

Често задавани въпроси

Изисква ли NVM sudo или root достъп за инсталиране на Node.js?

Не. NVM инсталира всичко под `~/.nvm` в домашната директория на текущия потребител. Не са необходими root привилегии за инсталиране или превключване на версии на Node.js. Това е едно от основните му предимства пред системните мениджъри на пакети.

Защо се появява `nvm: command not found` след инсталацията?

Блокът за инициализация на NVM е добавен към вашия шел профил, но профилът не е презареден в текущата сесия. Изпълнете `source ~/.bashrc` (Bash) или `source ~/.zshrc` (Zsh). Ако грешката продължава след отваряне на нов терминал, проверете дали блокът за инициализация действително е записан в правилния файл с `grep NVM_DIR ~/.bashrc`.

Могат ли множество потребители на един и същ сървър да имат различни версии на Node.js чрез NVM?

Да. Тъй като NVM инсталира в домашната директория на всеки потребител (`~/.nvm`), всеки потребител поддържа напълно независим набор от версии на Node.js и глобални пакети. Това е правилната архитектура за многопотребителски сървъри.

Какво се случва с глобално инсталираните npm пакети, когато превключа версии на Node.js с NVM?

Всяка версия на Node.js има собствена изолирана директория за глобални пакети. Пакетите, инсталирани глобално под една версия, не са видими за друга. Използвайте `nvm install <new-version> –reinstall-packages-from=<old-version>`, за да ги мигрирате автоматично.

Подходящ ли е NVM за изпълнение на Node.js приложения в производство на сървър?

NVM е добре подходящ за управление на това коя версия на Node.js се използва, но за управление на процеси в производство трябва да го комбинирате с мениджър на процеси като PM2 или да използвате systemd unit файлове. Уверете се, че тези неинтерактивни среди изрично зареждат NVM или препращат към пълния път до двоичния файл, както е описано в раздела за CI/CD по-горе.

15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало