Files
admin/.wiki/concepts/nvm-windows-node-switch.md

2.9 KiB
Raw Blame History

title, type, tags, sources, related, updated
title type tags sources related updated
nvm-windows: смена версии Node — junction, per-version глобалы, PATH-кэш concept
windows
nvm
node
npm
migration
recipe
concepts/nvm-junction-ismain-gate-gotcha.md
2026-08-18

nvm-windows: смена версии Node

Рецепт перехода Node 22 → 24.19.0 на рабочей машине (nvm-windows, 2026-08-18). Переиспользуемо для любой смены версии.

Шаги

nvm list                 # текущая: * 22.22.0, 18.20.8
nvm install 24.19.0      # или nvm install 24 (latest 24.x LTS)
nvm use 24.19.0          # переключает junction
node --version           # v24.19.0 (в НОВОМ терминале)

Грабли (все три — проверены эмпирически)

  1. Junction, не копия. C:\nvm4w\nodejs — junction на активную версию (→ C:\Users\vitya\AppData\Local\nvm\v24.19.0). nvm use меняет только target junction'а. Старые уже-запущенные процессы продолжают работать на старой версии (бинарь загружен в память) — перезапуск нужен только новым процессам.

  2. Глобальные пакеты per-version. npm i -g X ставит в …\nvm\<версия>\node_modules\ — после nvm use глобалы НЕ переносятся. Переустановить: npm i -g @sched/cli@0.1.2 @sched/daemon@0.3.4 … (старые остаются в каталоге старой версии, не мешают; откат = nvm use 22).

  3. Текущий shell кэширует PATH. После nvm use bash-сессия может выдавать node: command not found (кэш резолва) или держать старый бинарь. Фиксы: hash -r в bash / новый терминал / cmd /c "node --version" — cmd-сессия резолвит свежий junction.

npm 11: allow-scripts на global-установках

npm 11 предупреждает про install-скрипты, не покрытые allowScripts (напр. ssh2@1.17.0). В общем случае косметика — пакет грузится чистой JS-реализацией (require('ssh2').Client — function). Если нативный модуль действительно нужен — npm i -g --allow-scripts=<pkg>.

Evidence (переход 2026-08-18, sched F&F)

  • schedd --help через junction на Node 24.19.0 → полный help, exit 0, stderr пуст (ExperimentalWarning node:sqlite ушёл — Node 24 его не имеет)
  • демон под 24: health {ok:true, version:"0.3.2"}
  • junction realpath-фикс isMain (см. related-концепт) на 24 работает