Исправление ошибки '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
Discover how at OpenReplay.com.
Исправление проблем с конфигурацией 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.