--- title: "nvm-windows: смена версии Node — junction, per-version глобалы, PATH-кэш" type: concept tags: [windows, nvm, node, npm, migration, recipe] sources: [] related: [concepts/nvm-junction-ismain-gate-gotcha.md] updated: 2026-08-18 --- # nvm-windows: смена версии Node Рецепт перехода Node 22 → 24.19.0 на рабочей машине (nvm-windows, 2026-08-18). Переиспользуемо для любой смены версии. ## Шаги ```powershell 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=`. ## 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 работает