#Что означает ошибка
EACCES
EACCES при npm install -g возникает, когда глобальный каталог пакетов находится в системной папке (например, /usr/local/lib/node_modules), а у обычного пользователя нет прав на запись. Многие советуют просто запускать npm с sudo, но это небезопасно: скрипты установки пакетов выполняются с правами root, а файлы в вашем профиле потом принадлежат root.
Правильный подход — не устанавливать глобальные пакеты в системные каталоги: использовать менеджер версий Node.js (nvm, fnm, volta) либо настроить собственный префикс в домашней папке.
Настройте префикс npm в домашней папке или используйте nvm; не используйте sudo.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Системный каталогПрава. | Проявляется как «EACCES» или близкий по смыслу сбой. | Смените prefix. |
| Установка через sudoРиск. | Проявляется как «EACCES» или близкий по смыслу сбой. | Используйте nvm. |
| Кэш npmВладелец. | Проявляется как «EACCES» или близкий по смыслу сбой. | chown. |
| Каталог проектаПрава. | Проявляется как «EACCES» или близкий по смыслу сбой. | Исправьте. |
#Пошаговое решение
- Определите, куда npm пытается записать файлыВ терминале Linux/macOS выполните
npm config get prefixиnpm config get cache, затем проверьте владельца именно указанных каталогов. Ошибка EACCES приnpm install -gобычно связана с системной папкой установки. Не используйтеsudo npm install -gкак постоянную практику. - Предпочтительно используйте менеджер версий NodeДля личной учётной записи изучите официальный nvm (Linux/macOS) или другой поддерживаемый менеджер версий. Прочитайте установочный сценарий из официального репозитория до запуска и установите рекомендованную поддерживаемую версию Node; после входа в новый терминал проверьте
node -v,npm -vи путь npm. - Альтернатива: задайте пользовательский prefixНа Linux/macOS создайте каталог
mkdir -p "$HOME/.npm-global", выполнитеnpm config set prefix "$HOME/.npm-global"; добавьте$HOME/.npm-global/binв PATH через конфигурацию используемой оболочки (для zsh —~/.zshrc, для bash — соответствующий файл профиля). Это альтернатива nvm, а не обязательный дополнительный шаг. - Проверьте запись без расширения системных правОткройте новый терминал, проверьте
npm config get prefixиcommand -v npm, затем запустите ранее неудавшуюся установку. Если EACCES возникает в кэше, изменяйте владельца только собственной папки.npmпосле осмотра её содержимого; не применяйте рекурсивныйchownко всему дому или системным каталогам.
#Менеджер версий nvm
Установите nvm, затем выполните nvm install --lts. Node и все глобальные пакеты окажутся в вашем домашнем каталоге (~/.nvm), права не нужны, а версии переключаются командой nvm use. Это решение рекомендуется официально для разработки.
#Свой префикс
Создайте каталог ~/.npm-global, выполните npm config set prefix ~/.npm-global и добавьте ~/.npm-global/bin в PATH (файл ~/.profile или ~/.zshrc). После этого глобальные установки идут в ваш каталог без sudo.
#Если ошибка в проекте
Если файлы кэша npm принадлежат root после прежних запусков sudo, администратор должен проверить владельцев и исправить их только внутри конкретной пользовательской папки кэша. Не используйте рекурсивную смену владельца всего проекта или домашнего каталога как универсальное решение.
npm config get prefixnpm config get cache#Проверка результата
Выполните npm config get prefix и убедитесь, что путь указывает в домашний каталог. Затем установите любой глобальный пакет, например npm install -g npm-check-updates, и проверьте, что он запускается из терминала. Если команда не найдена, откройте новый терминал: переменная PATH применяется только к новым сеансам.