#Симптомы и условия возникновения
При npm run build появляется «command not found», «is not recognized» либо ENOENT для программы сборки. Причина обычно в зависимости, отсутствующем локальном исполняемом файле или ошибке команды в scripts, а не в настройке глобального PATH. Для начала проверьте используемую версию среды и точный текст ошибки на копии проекта, не меняя рабочий сервер.
#Причины и как их отличить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Нет dev-зависимостиВ этой ситуации наблюдается конкретный диагностический признак. Сопоставьте его с журналом ошибки и результатом соответствующей проверки, прежде чем выбирать исправление. | Пакет вроде vite/tsc указан в devDependencies, но установился production-набор | В тестовой сборочной среде включить devDependencies. |
| Неверное имя в scriptsВ этой ситуации наблюдается конкретный диагностический признак. Сопоставьте его с журналом ошибки и результатом соответствующей проверки, прежде чем выбирать исправление. | Скрипт ссылается на устаревшую команду | Сверить имя bin по документации установленного пакета. |
| Запуск из неверного проектаВ этой ситуации наблюдается конкретный диагностический признак. Сопоставьте его с журналом ошибки и результатом соответствующей проверки, прежде чем выбирать исправление. | Собирается другой package.json | Перейти в каталог нужного приложения. |
#Пошаговая диагностика и решение
- 1. Скопируйте строку ошибки и имя командыЗапустите скрипт в копии проекта и посмотрите первый отсутствующий исполняемый файл, например
vite,tscилиwebpack; не следует переустанавливать все пакеты до идентификации конкретного инструмента.
- 2. Проверьте script в package.jsonОткройте package.json → scripts → build. Найдите команду до первого пробела и сравните с именем bin, которое предоставляет пакет. Синтаксис команд Windows и Linux различается, особенно в установке переменных среды.
- 3. Убедитесь, что npm работает в нужном каталогеВ терминале выполните
npm pkg get scripts.build, убедитесь, что вы видите ожидаемый скрипт. Если выводundefined, у текущего пакета нет такого сценария. - Чтение из package.json текущего проектаLinux · Терминал (Bash)КомандаЧтение из package.json текущего проекта. Наличие строки подтверждает правильную папку.
npm pkg get scripts.build
- 4. Проверьте установку зависимостиЗапустите
npm ls имя-пакета --depth=0. Если пакет отсутствует, убедитесь, что он указан как зависимость проекта, а не только установлен глобально.
- 5. Сверьте режим установкиПроверьте NODE_ENV, настройку omit и наличие пакета в devDependencies. На стадии сборки в копии выполните
npm ci --include=devс подтверждённым lock-файлом. - Только в тестовой папке: удаляет локальный node_modules и запускает скрипты установкиLinux · Терминал (Bash)С осторожностьюТолько в тестовой папке: удаляет локальный node_modules и запускает скрипты установки.
npm ci --include=devКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- 6. Найдите локальный исполняемый файлПосмотрите
node_modules/.binпосле установки. На Windows исполняемый файл может быть .cmd, в Linux/macOS — ссылка/скрипт; npm run сам добавляет этот каталог в PATH, поэтому глобальная установка не нужна.
- 7. Повторите сборкуВ копии проекта выполните
npm run build, проверьте наличие ожидаемого результата (dist/build, если так определено проектом), код возврата и лог ошибок. При новой ошибке компиляции разбирайте её отдельно.
#Как проверить результат и что делать, если не помогло
Локальный инструмент запускается из npm run build, сборка создаёт предусмотренные файлы, а глобальные системные пакеты менять не пришлось.
Если неисправность повторилась, выпишите первый код ошибки и действие, на котором она возвращается. Сравните версию Node.js/npm, рабочий каталог, настройки процесса и журнал тестового запуска. Откатите только внесённые изменения из предварительно сохранённой копии, затем разберите причину на отдельной среде.