npm ERR! EACCES: как исправить ошибку доступа при установке пакетов
Пошаговое руководство по устранению ошибки npm ERR! EACCES permission denied при установке глобальных пакетов: права доступа, nvm, директория npm.
Симптомы
- npm ERR! code EACCES
- npm ERR! syscall mkdir
- permission denied при npm install -g
- Cannot find module после установки
- npm update не работает из-за прав доступа
Возможные причины
- Неправильные права доступа к директории npm
- Использование sudo с npm (не рекомендуется)
- Docker-образ запущен от root
- Глобальная установка пакетов без прав
- Конфликт версий npm
Пошаговое решение
Определите директорию npm
Выполните npm config get prefix чтобы увидеть путь к глобальной директории. По умолчанию это /usr/local (Linux/macOS) или %AppData%\npm (Windows). Если путь указывает на /usr, это вызывает проблемы с правами. Неправильно: npm install -g пакет без прав root. Правильно: использовать nvm или изменитьpermissions.
npm config get prefix Измените права доступа (Linux/macOS)
Выполните sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share} для смены владельца директорийnpm. Это безопаснее, чем использовать sudo с npm. После этого глобальные установки будут работать без sudo. Если директория /usr/local, используйте: sudo chown -R $(whoami) /usr/local/lib/node_modules /usr/local/bin.
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share} Установите nvm и переключите версию
Лучшее решение — установить nvm (Node Version Manager).curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash. Затем: nvm install --lts и nvm use --lts. Nvm устанавливает Node.js в домашнюю директорию, полностью устраняя проблемы с правами. Все глобальные пакеты будут в ~/.nvm/.
nvm install --lts Настройтеpréfix для npm
Создайте директорию дляnpm пакетов: mkdir -p ~/.npm-global. Настройтеpréfix: npm config set prefix ~/.npm-global. Добавьте в PATH: export PATH=~/.npm-global/bin:$PATH. Добавьте строку в ~/.bashrc или ~/.zshrc для постоянства. Теперь npm install -g пакет будет работать без sudo.
npm config set prefix ~/.npm-global Исправьте права в Docker
Если ошибка в Docker-контейнере, не запускайте npm от root. Используйте USER node в Dockerfile (предварительно создайте пользователя:RUN addgroup -S node && addgroup -S node). Или используйте --user $(id -u):$(id -g) при запуске контейнера. Проверьте текущего пользователя: whoami внутри контейнера.
whoami Очистите кеш и переустановите
Если проблема сохраняется, очистите кеш npm: npm cache clean --force. Удалите node_modules: rm -rf node_modules. Установите заново: npm install. Проверьтеpackage-lock.json — он не должен содержать абсолютных путей. Для глобальных пакетов: npm ls -g --depth=0 покажет все установленные пакеты.
npm cache clean --force && rm -rf node_modules && npm install Ошибка EACCES (permission denied) возникает, когда npm не может записать файлы в системную директорию. Это типичная проблема Linux/macOS при установке глобальных пакетов без прав root. Решение — не использовать sudo с npm, а настроить nvm или изменить права доступа.
Почему sudo с npm — плохая идея
Использование sudo npm install -g пакет создаёт файлы от root в системных директориях. Это приводит к дальнейшим конфликтам прав:обычного пользователя не сможет обновлять или удалять эти пакеты. Безопаснее: установить nvm или настроитьpréfix в домашней директории.
Проверка состояния пакетов
Выполните sudo apt —fix-broken install (Debian/Ubuntu) или sudo dnf distro-sync (Fedora) для исправления сломанных зависимостей. Проверьте повреждённые пакеты: sudo dpkg —audit (Debian) или sudo rpm -Va (RHEL). Это покажет, какие файлы изменены или отсутствуют.
Очистка кеша
Очистите кеш пакетов: sudo apt clean (Debian) или sudo dnf clean all (Fedora). Удалите неиспользуемые зависимости: sudo apt autoremove. Это освободит место и устранит конфликты версий. Если ошибка в репозитории, проверьте /etc/apt/sources.list на наличие неверных URL.
Переустановка пакета
Для переустановки повреждённого пакета: sudo apt install —reinstall имя-пакета. Если пакет зависит от других повреждённых, переустановите их все. Проверьте версию: apt show имя-пакета. Убедитесь, что версия совместима с вашейОС.
Исправление ключей GPG
Если ошибка связана с подписью пакета (NO_PUBKEY), обновите ключи: sudo apt-key adv —keyserver keyserver.ubuntu.com —recv-keys КЛЮЧ. Или: sudo gpg —keyserver keyserver.ubuntu.com —recv КЛЮЧ. Для Fedora: sudo rpm —import /etc/pki/rpm-gpg/RPM-GPG-KEY-*.
Проверка репозиториев
Убедитесь, что репозитории доступны и не дублируются: apt-cache policy (Debian) или dnf repolist (Fedora). Отключите ненужные репозитории: sudo add-apt-repository —remove ppa:имя. Для Fedora: sudo dnf config-manager —set-disabled репозиторий. Конфликтующие репозитории — частая причина ошибок.
Источники
- docs.npmjs.com — проверено 02.06.2026
- stackoverflow.com — проверено 02.06.2026
- stackoverflow.com — проверено 02.06.2026
- stackoverflow.com — проверено 02.06.2026