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

55 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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=<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 работает