Back

Исправление ошибки 'sh: command not found: npm' на macOS и Linux

Исправление ошибки 'sh: command not found: npm' на macOS и Linux

Когда в терминале появляется ошибка sh: command not found: npm, это означает, что ваша оболочка не может найти исполняемый файл npm. Эта ошибка обычно возникает, когда Node.js не установлен, npm отсутствует в системной переменной PATH, или требуется обновление конфигурации оболочки. Вот как диагностировать и исправить эту распространённую проблему Node.js на системах macOS и Linux.

Ключевые моменты

  • Ошибка npm command not found возникает, когда npm отсутствует в переменной окружения PATH
  • Установка Node.js через менеджеры пакетов или nvm автоматически настраивает параметры PATH
  • Различные оболочки (Bash, Zsh, Fish) требуют изменения специфических конфигурационных файлов
  • Использование nvm обеспечивает наиболее гибкое решение для управления несколькими версиями Node.js

Понимание ошибки PATH для npm

Ошибка возникает потому, что ваша оболочка ищет команды в каталогах, перечисленных в переменной окружения PATH. Когда npm отсутствует в любом из этих каталогов, вы получаете сообщение sh: command not found: npm. Это происходит в трёх сценариях: Node.js никогда не был установлен, установка завершилась частично, или конфигурация PATH неверна.

Быстрая диагностика: проверка текущей конфигурации

Сначала проверьте, установлен ли Node.js:

node --version

Если Node.js установлен, но npm не работает, проверьте, существует ли npm в вашей системе:

which npm

Отсутствие вывода означает, что npm отсутствует в вашем PATH. Далее изучите текущую конфигурацию PATH:

echo $PATH

Это показывает все каталоги, в которых ваша оболочка ищет команды. Если каталог npm не указан, в этом и заключается проблема.

Установка Node.js и npm на macOS

Использование Homebrew (рекомендуется)

Homebrew предоставляет наиболее чистый метод установки для macOS:

brew install node

Это устанавливает как Node.js, так и npm, автоматически настраивая ваш PATH. Проверьте установку:

npm --version

Метод прямой загрузки

Альтернативно, загрузите установщик с nodejs.org. Установщик для macOS автоматически обрабатывает конфигурацию PATH, но после этого вам потребуется перезапустить терминал.

Установка Node.js и npm на Linux

Системы Ubuntu/Debian

Используйте менеджер пакетов вашего дистрибутива:

sudo apt update
sudo apt install nodejs npm

Системы Fedora/RHEL

sudo dnf install nodejs npm

Arch Linux

sudo pacman -S nodejs npm

После установки проверьте работу npm:

npm --version

Исправление проблем с конфигурацией PATH

Если npm установлен, но всё ещё показывает ошибку, вам нужно добавить его в PATH вручную.

Для пользователей Bash

Отредактируйте файл .bashrc:

echo 'export PATH="$PATH:/usr/local/bin"' >> ~/.bashrc
source ~/.bashrc

Для пользователей Zsh (по умолчанию в macOS)

Отредактируйте файл .zshrc:

echo 'export PATH="$PATH:/usr/local/bin"' >> ~/.zshrc
source ~/.zshrc

Замените /usr/local/bin на фактический путь установки npm. Найдите его с помощью:

find / -name npm 2>/dev/null

Использование Node Version Manager (nvm)

nvm предотвращает конфликты версий и проблемы с PATH, управляя установками Node.js отдельно от системных пакетов. Этот подход устраняет большинство ошибок npm command not found.

Установка nvm

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

Установка Node.js через nvm

nvm install node
nvm use node

nvm автоматически обрабатывает конфигурацию PATH и позволяет переключаться между версиями Node.js для разных проектов. Это особенно полезно при работе с проектами, требующими конкретных версий Node.js.

Устранение проблем для конкретных оболочек

Различные оболочки могут требовать специфических конфигураций:

  • Bash: проверьте .bashrc или .bash_profile
  • Zsh: проверьте .zshrc
  • Fish: проверьте ~/.config/fish/config.fish

Всегда перезапускайте терминал или выполняйте source для конфигурационного файла после внесения изменений.

Проверка исправления

После применения любого решения проверьте корректную работу npm:

npm --version
npm list -g --depth=0

Протестируйте установку пакета для обеспечения полной функциональности:

npm install -g npm@latest

Распространённые ошибки, которых следует избегать

Не используйте sudo с глобальными установками npm, если это не является абсолютно необходимым — это может вызвать проблемы с правами доступа позже. Если вы столкнулись с ошибками прав доступа, рассмотрите возможность изменения каталога npm по умолчанию или используйте npx вместо глобальных установок.

Для корпоративных сред с прокси-серверами настройте параметры прокси npm:

npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080

Заключение

Ошибку sh: command not found: npm легко исправить, как только вы поймёте её причину. Будь то через менеджеры пакетов, прямую установку или nvm, для работы npm необходимо убедиться, что Node.js установлен и ваш PATH настроен правильно. Использование nvm обеспечивает наиболее гибкое решение, особенно для разработчиков, управляющих несколькими проектами. При правильно функционирующем npm вы можете сосредоточиться на разработке, а не на устранении неполадок в среде разработки.

Часто задаваемые вопросы

Разные терминалы могут использовать различные конфигурации оболочек. Проверьте, какую оболочку вы используете, с помощью echo $SHELL, и убедитесь, что PATH установлен в правильном конфигурационном файле для этой оболочки.

Да, использование nvm позволяет устанавливать и переключаться между несколькими версиями Node.js и npm. Каждая версия изолирована, что предотвращает конфликты между проектами, требующими разных версий.

Устанавливайте пакеты локально для зависимостей проекта и глобально только для инструментов командной строки, которые вы используете в разных проектах. Локальная установка предотвращает конфликты версий и проблемы с правами доступа.

Измените каталог npm по умолчанию на тот, которым вы владеете, используя npm config set prefix, или используйте npx для запуска пакетов без их глобальной установки. Это полностью избавляет от проблем с правами доступа.

Understand every bug

Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay