Разработка 6 мин чтения

npm ERR! EACCES: как исправить ошибку доступа при установке пакетов

Пошаговое руководство по устранению ошибки npm ERR! EACCES permission denied при установке глобальных пакетов: права доступа, nvm, директория npm.

npmNode.jsEACCESpermission deniedпакеты

Симптомы

  • npm ERR! code EACCES
  • npm ERR! syscall mkdir
  • permission denied при npm install -g
  • Cannot find module после установки
  • npm update не работает из-за прав доступа

Возможные причины

  • Неправильные права доступа к директории npm
  • Использование sudo с npm (не рекомендуется)
  • Docker-образ запущен от root
  • Глобальная установка пакетов без прав
  • Конфликт версий npm

Пошаговое решение

1

Определите директорию npm

Выполните npm config get prefix чтобы увидеть путь к глобальной директории. По умолчанию это /usr/local (Linux/macOS) или %AppData%\npm (Windows). Если путь указывает на /usr, это вызывает проблемы с правами. Неправильно: npm install -g пакет без прав root. Правильно: использовать nvm или изменитьpermissions.

Команда
npm config get prefix
2

Измените права доступа (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}
3

Установите 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
4

Настройте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
5

Исправьте права в Docker

Если ошибка в Docker-контейнере, не запускайте npm от root. Используйте USER node в Dockerfile (предварительно создайте пользователя:RUN addgroup -S node && addgroup -S node). Или используйте --user $(id -u):$(id -g) при запуске контейнера. Проверьте текущего пользователя: whoami внутри контейнера.

Команда
whoami
6

Очистите кеш и переустановите

Если проблема сохраняется, очистите кеш 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 репозиторий. Конфликтующие репозитории — частая причина ошибок.

Источники

  1. docs.npmjs.com — проверено 02.06.2026
  2. stackoverflow.com — проверено 02.06.2026
  3. stackoverflow.com — проверено 02.06.2026
  4. stackoverflow.com — проверено 02.06.2026