К содержимому

npm из портативного Node падает с MODULE_NOT_FOUND

npm -v → Error: Cannot find module '...\node_modules\npm\bin\npm-cli.js'

node 22windows

Ставил Astro 7 на портативный Node 22. node -v отвечает бодро, npm -v — падает:

Error: Cannot find module 'D:\...\node-v22.13.0-win-x64\node_modules\npm\bin\npm-cli.js'
    at Function._resolveFilename (node:internal/modules/cjs/loader:1244:15)

Причина

В папке с Node лежат npm.cmd, npx.cmd, corepack.cmd — и нет node_modules/.

Это не «npm сломался». Обёртки .cmd — тонкие батники на три строки, вся логика лежит в node_modules/npm/. Если архив распаковали частично или выборочно, обёртки остаются (они в корне), а код исчезает. Симптом выглядит как поломка npm, хотя npm там просто никогда не было.

Тот же механизм убивает npx и corepack — они устроены одинаково.

Решение

Проверить, что пропало именно тело:

ls "$NODE_DIR/node_modules/npm/bin/npm-cli.js"

Если файла нет — взять node_modules из любой рабочей установки Node. npm — обычный JavaScript, он не привязан к мажору движка: npm 10.8.2 от Node 20 нормально работает под Node 22.

robocopy "<рабочий-node>/node_modules" "<битый-node>/node_modules" /E

Проверка:

export PATH="/d/путь/node-v22.13.0-win-x64:$PATH"
node -v   # v22.13.0
npm -v    # 10.8.2

Правильнее, конечно, перекачать дистрибутив целиком. Но если интернет медленный, а собрать нужно сейчас — копирование чинит за секунды.

Как не наступить снова

Портативный Node после распаковки проверяется одной командой — npm -v. Если она молчит про версию, дистрибутив битый, и лучше узнать об этом до того, как начнёшь ставить зависимости проекта.

Дальше

Новые разборы выходят в Telegram раньше, чем попадают сюда. Без анонсов курсов — только материалы.

Читать в Telegram →