Ошибка: EACCES: отказано в доступе, доступ к '/usr/local/lib/node_modules'
Описание проблемы:
При попытке установить пакет через NPM возникает ошибка:
Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
Код ошибки выглядит следующим образом:
npm ERR! path /usr/local/lib/node_modules
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall access
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR! { Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
npm ERR! syscall: 'access',
npm ERR! path: '/usr/local/lib/node_modules' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.
Согласно сообщению об ошибке, у меня нет необходимых прав для доступа к каталогу /usr/local/lib/node_modules
. Я пробовал выполнить установку с правами администратора, но проблема не исчезла.
Полный лог выполнения команды можно найти по пути:
/Users/macbookmd101/.npm/_logs/2018-02-21T16_26_08_421Z-debug.log
Как я могу решить эту проблему?
5 ответ(ов)
Я попробовал решение, предложенное в ответе от @okanda, но у меня оно не сработало.
Однако все заработало идеально, когда я применил его ко многим папкам, как упоминается в этой ветке: https://github.com/angular/angular-cli/issues/9676#issuecomment-464857493.
Вот команды, которые я использовал:
sudo chown -R $USER /usr/local/lib/
sudo chown -R $USER /usr/local/bin/
sudo chown -R $USER /usr/local/share/
Вам нужно просто добавить пользователя к владельцам папки /usr/local/lib
. Используйте следующую команду:
sudo chown -R $USER /usr/local/lib
ПРАВКА:
Чтобы точно и только изменить владельца папки node_modules
, попробуйте использовать эту команду перед предыдущей:
sudo chown -R $USER /usr/local/lib/node_modules
Попробуйте добавить sudo перед любой командой, которую вы пытаетесь выполнить.
Например: sudo npm install
Использование sudo с командой в Linux/UNIX, как правило, повышает ваши права до уровня суперпользователя. В Windows учетная запись суперпользователя обычно называется 'Администратор'. В Linux/Unix учетная запись суперпользователя часто именуется 'root'.
Пользователь root имеет право доступа, модификации или удаления почти любого файла на вашем компьютере. Обычные учетные записи пользователей могут иметь доступ к намного меньшему количеству файлов. Ограничения для обычной учетной записи защищают ваш компьютер от несанкционированных или вредоносных программ и пользователей. Некоторые процессы требуют выполнения действий с файлами или папками, на которые у вас нет обычных прав доступа. Установка программы, доступной для всех, – это одно из таких действий.
В вашем случае запуск команды установки с sudo предоставляет вам права суперпользователя и позволяет модифицировать файлы, к которым обычный пользователь не имеет прав.
Если вы сталкиваетесь с этой проблемой на своем Mac, выполните следующие шаги:
Сначала используйте следующую команду, чтобы определить, кто владеет этим файлом:
ls -la /usr/local/lib/node_modules
Вы увидите перечень файлов, один из которых будет выглядеть примерно так:
drwxr-xr-x 3 root wheel 768 May 29 02:21 node_modules
Обратите внимание, что указанный выше файл принадлежит пользователю root. Чтобы внести изменения внутри, необходимо изменить владельца директории.
Вы можете использовать следующую команду, чтобы узнать, кто является текущим пользователем:
id -un (в моем случае пользователь - Yamsol)
После этого вы можете изменить владельца, выполнив команду (замените ownerName
на ваше имя пользователя):
sudo chown -R ownerName: /usr/local/lib/node_modules
В моем случае, как вы уже знаете, пользователь - "yamsol", поэтому я выполню эту команду следующим образом:
sudo chown -R yamsol: /usr/local/lib/node_modules
Вот и все.
Похоже, вы столкнулись с проблемами прав доступа. Если вы устанавливаете npm-пакеты
, возможно, вы получаете ошибку EACCES
, пытаясь установить пакет глобально. Это означает, что у вас нет разрешения на запись в директории, которые npm
использует для хранения глобальных пакетов и команд.
Попробуйте выполнить команды: sudo chmod u+x -R ~/.npm
и sudo chown $USER -R ~/.npm
, или вы можете просто запускать любые команды npm
с sudo
, это должно решить вашу проблему.
Если вы устанавливаете npm-пакет
локально, убедитесь, что вы находитесь в директории вашего локального проекта, и попробуйте выполнить команду sudo npm install <имя-пакета>
для установки необходимого пакета. Цель использования sudo
заключается в том, чтобы изменить права владельца, чтобы ваш текущий пользователь получил разрешение на выполнение команд npm
.
Я бы порекомендовал вам ознакомиться с документацией по ссылке: https://docs.npmjs.com/getting-started/fixing-npm-permissions.
Как исправить ошибку npm без использования sudo
Как предотвратить установку "devDependencies" модулей NPM для Node.js (package.json)?
Ошибка "npm WARN package.json: Нет поля repository"
nvm постоянно "забывает" Node.js в новой сессии терминала
Установка локального модуля с помощью npm?