🔀
Хостинг

nvm билан Node.js версияларини бошқариш: ўрнатиш, алмаштириш ва .nvmrc

05.11.2026
← Барча мақолалар

Node.js жуда тез ривожланади ва ҳар бир лойиҳа ўз версиясига боғланиб қолади. Икки йил олдин ёзилган админ панел эски версияда ишлайди, янги Next.js лойиҳа эса замонавий LTS версиясини талаб қилади. Тизимга пакет менежери орқали битта Node.js ўрнатилган бўлса, иккаласини бир серверда ушлаш қийинлашади. nvm, яъни Node Version Manager, ҳар бир фойдаланувчига ўз уй папкасида бир нечта Node.js версиясини сақлаш ва улар орасида битта буйруқ билан алмашиш имконини беради.

nvm қандай ишлайди

nvm оддий shell скрипт бўлиб, Node.js версияларини фойдаланувчининг ~/.nvm папкасига юклаб олади. Версия алмаштирилганда у фақат жорий терминал сессиясининг PATH ўзгарувчисини ўзгартиради, тизим файлларига тегмайди. Шу сабабли nvm ишлатиш учун root ҳуқуқи керак эмас ва бир фойдаланувчининг созламалари бошқасига таъсир қилмайди. Бунинг тескари томони ҳам бор: nvm орқали ўрнатилган Node.js фақат шу фойдаланувчи учун ва фақат nvm юкланган сессияда кўринади.

nvm ўрнатиш

Ўрнатиш расмий GitHub омборидаги скрипт орқали бажарилади. Скрипт версия рақами билан чақирилади, шунинг учун энг сўнгги релизни nvm репозиторийсидаги README'дан текшириб олинг. Қуйидаги мисолда v0.40.1 кўрсатилган.

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

Скрипт ~/.bashrc файлига nvm'ни юклайдиган бир неча қатор қўшади. Агар nvm --version "command not found" деса, терминални ёпиб қайта очинг ёки source буйруғини қайта бажаринг. zsh ишлатаётган бўлсангиз, қаторлар ~/.zshrc га қўшилади.

Версияларни ўрнатиш ва алмаштириш

nvm'да энг кўп ишлатиладиган буйруқлар бир нечта. Мавжуд версиялар рўйхатини кўриш, керакли версияни ўрнатиш, унга ўтиш ва стандарт версияни белгилаш шулар жумласидан. Production учун одатда LTS, яъни узоқ муддат қўллаб-қувватланадиган версиялар танланади, чунки улар узоқроқ вақт хавфсизлик янгиланишларини олади.

nvm ls-remote --lts        # mavjud LTS versiyalar
nvm install --lts          # eng so'nggi LTS
nvm install 18             # 18.x ning oxirgisi
nvm use 18                 # joriy sessiyada 18 ga o'tish
nvm alias default 20       # yangi sessiyalar uchun standart
nvm ls                     # o'rnatilgan versiyalar
node -v

nvm use фақат очиқ терминалга таъсир қилади. Янги сессия очилганда default сифатида белгиланган версия юкланади. Шунинг учун серверда энг кўп ишлатиладиган версияни стандарт қилиб қўйиш, қолганларига эса керак бўлганда ўтиш қулай.

.nvmrc файли: лойиҳа ўз версиясини эслаб қолади

Ҳар сафар қайси лойиҳа қайси версияда ишлашини эслаб юриш шарт эмас. Лойиҳа папкасига .nvmrc номли файл яратиб, ичига версия рақамини ёзсангиз, шу папкада nvm use буйруғи параметрсиз ҳам тўғри версияни танлайди. Бу файл Git'да сақланади ва жамоадаги ҳар бир дастурчи бир хил версияда ишлайди.

cd /var/www/eski-panel
echo "18" > .nvmrc
nvm install    # .nvmrc dagi versiyani o'rnatadi
nvm use        # .nvmrc dagi versiyaga o'tadi

Қўшимча равишда package.json файлидаги engines майдонида ҳам керакли версия оралиғини кўрсатиш фойдали. Бу nvm'ни бошқармайди, лекин нотўғри версияда ўрнатишга уринилганда огоҳлантириш беради.

PM2, cron ва сйстемд билан ишлатиш

Энг кўп учрайдиган муаммо шу ерда пайдо бўлади. nvm фақат интерактив shell'да юкланади, cron вазифалари ва сйстемд хизматлари эса ~/.bashrc ни ўқимайди. Натижада терминалда ҳамма нарса ишлайди, лекин cron'даги скрипт "node: command not found" деб йиқилади. Ечим оддий: бундай жойларда Node.js'га тўлиқ йўл кўрсатинг.

nvm which 20
# /home/deploy/.nvm/versions/node/v20.x.x/bin/node
# crontab ichida
*/10 * * * * /home/deploy/.nvm/versions/node/v20.18.0/bin/node /var/www/misol-app/jobs/sync.js

Юқоридаги v20.18.0 фақат мисол, ўзингиздаги аниқ йўлни nvm which натижасидан олинг. PM2 билан эса вазият бироз осонроқ: PM2'ни керакли версия танланган сессияда ўрнатсангиз, у ишга туширган иловалар шу версиядан фойдаланади. Турли лойиҳалар турли версияда ишлаши керак бўлса, ecosystem файлида interpreter майдонига аниқ йўлни ёзиш мумкин.

apps: [{
  name: "eski-panel",
  script: "index.js",
  interpreter: "/home/deploy/.nvm/versions/node/v18.20.4/bin/node"
}]

Node.js версиясини янгилагандан кейин pm2 startup буйруғини қайта бажариш керак бўлиши мумкин, чунки startup скриптида эски версия йўли ёзилган бўлади. PM2 бу ҳақда ўзи огоҳлантиради.

Амалий мисол: битта VPS'да икки лойиҳа

Самарқанддаги кичик веб-студия битта VPS'да икки мижоз лойиҳасини сақлайди. Биринчиси misol.uz учун 2022 йилда ёзилган Express панел бўлиб, у Node.js 18 дан юқорида баъзи эски пакетлар туфайли ишламайди. Иккинчиси example.uz учун янги Next.js сайт, у Node.js 20 ёки ундан юқорини талаб қилади. Студия deploy фойдаланувчисига nvm ўрнатиб, ҳар икки версияни юклади, ҳар бир лойиҳа папкасига .nvmrc қўйди ва PM2 ecosystem файлида ҳар бирига ўз интерпретер йўлини ёзди. Энди эски панелни янгилаш янги сайтга таъсир қилмайди.

Кераксиз версияларни тозалаш

Вақт ўтиши билан ~/.nvm папкасида ишлатилмайдиган версиялар тўпланиб қолади ва диск жойини эгаллайди. Уларни ўчиришдан олдин ҳеч бир PM2 иловаси ёки cron вазифаси шу версияга боғланмаганини текширинг.

nvm ls
nvm uninstall 16
nvm cache clear

Агар сизга бир нечта Node.js версияси билан эркин ишлаш муҳим бўлса, sayt.uz кабинетидан VPS олиб, nvm'ни ўз фойдаланувчингиз остида созлашингиз мумкин. Бу усул тизим пакетларига тегмайди ва ҳар бир лойиҳа ўз муҳитида қолади.

Ўхшаш мақолалар

📧 ISPmanager'да корпоратив почта қутиси яратиш ва созлаш 🚀 Узилишсиз деплой: симлинк ва релиз папкалари билан сайтни янгилаш ⚡ Redis'ни хостингда ишлатиш: сессия ва кеш учун амалий қўлланма ⚙️ PM2 билан Node.js иловани бошқариш: ишга тушириш, логлар ва кластер режим
🌐 Тил
🇺🇿 O'zbek 🇺🇿 Ўзбек ✓ 🇷🇺 Русский 🇬🇧 English