Как исправить ошибку npm без использования sudo
Установил Node.js и npm через пакет с сайта nodejs.org, но каждый раз, когда я пытаюсь выполнить поиск или установить что-то с помощью npm, возникает следующая ошибка, если я не использую sudo для команды. У меня есть подозрения, что это проблема с правами доступа. Я уже являюсь администратором.
npm ERR! Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR! { [Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json']
npm ERR! errno: 3,
npm ERR! code: 'EACCES',
npm ERR! path: '/Users/chietala/.npm/-/all/.cache.json' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.
npm ERR! System Darwin 12.2.0
npm ERR! command "node" "/usr/local/bin/npm" "search" "bower"
npm ERR! cwd /Users/chietala
npm ERR! node -v v0.10.4
npm ERR! npm -v 1.2.18
npm ERR! path /Users/chietala/.npm/-/all/.cache.json
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /Users/chietala/npm-debug.log
npm ERR! not ok code 0
Как я могу решить эту проблему с правами доступа, чтобы использовать npm без необходимости использовать sudo?
5 ответ(ов)
Похоже, что проблема связана с правами доступа к вашему домашнему каталогу. Чтобы вернуть себе права собственности на директорию .npm, выполните следующую команду:
sudo chown -R $(whoami) ~/.npm
Для выполнения данной операции вам также потребуется право на запись в директории node_modules
. Вы можете изменить владельца этой папки, выполнив следующую команду:
sudo chown -R $USER /usr/local/lib/node_modules
Эта команда изменит владельца всех файлов и папок в указанной директории на текущего пользователя, что позволит вам устанавливать необходимые модули без проблем с доступом.
Внимание!!! Внимание!!! Внимание!!!
Использовать chown
или chmod
НЕ является правильным решением, так как это может привести к рискам безопасности.
Вместо этого сделайте следующее:
Сначала проверьте, на что указывает npm
, выполнив:
npm config get prefix
Если в результате вы получите /usr
, вы можете сделать следующее:
mkdir ~/.npm-global
export NPM_CONFIG_PREFIX=~/.npm-global
export PATH=$PATH:~/.npm-global/bin
Это создаст директорию npm в вашем домашнем каталоге и укажет npm
использовать её.
Чтобы сохранить эти изменения навсегда, вам нужно добавить команду export
в ваш файл .bashrc
:
echo -e "export NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=\$PATH:~/.npm-global/bin" >> ~/.bashrc
После этого вы можете выполнить команду source ~/.bashrc
, чтобы изменения вступили в силу.
Официальная документация по исправлению прав доступа при выполнении npm install
с ошибкой EACCES
доступна по следующему адресу: https://docs.npmjs.com/getting-started/fixing-npm-permissions.
Я столкнулся с этой проблемой после чистой установки Node.js с использованием установщика .pkg
на OSX. Здесь есть несколько отличных ответов, но я не увидел ссылки на npmjs.com.
Вариант 1: Измените права доступа к каталогу по умолчанию npm
Найдите путь к каталогу npm:
npm config get prefix
Для большинства систем это будет /usr/local.
ПРЕДУПРЕЖДЕНИЕ: Если отображаемый путь - это просто /usr, перейдите к Варианту 2.
Измените владельца каталогов npm на имя текущего пользователя (ваше имя пользователя!):
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
Это изменит права доступа на подкаталоги, используемые npm и некоторыми другими инструментами (lib/node_modules, bin и share).
Вариант 2: Измените каталог npm по умолчанию на другой каталог
Иногда вы можете не захотеть изменять владельца каталога по умолчанию, который использует npm (т.е. /usr), так как это может вызвать некоторые проблемы, например, если вы делите систему с другими пользователями.
Вместо этого вы можете настроить npm на использование совершенно другого каталога. В нашем случае это будет скрытый каталог в нашей домашней директории.
Создайте каталог для глобальных установок:
mkdir ~/.npm-global
Настройте npm на использование нового пути каталога:
npm config set prefix '~/.npm-global'
Откройте или создайте файл ~/.profile и добавьте эту строку:
export PATH=~/.npm-global/bin:$PATH
Возвратитесь в командную строку и обновите ваши системные переменные:
source ~/.profile
Эти шаги помогут вам решить проблему с правами доступа при использовании npm.
Я столкнулся с этой проблемой, и хотя действительно ~/.npm
должен принадлежать вашему пользователю, npm
не устанавливал модули туда.
Что на самом деле решило мою проблему, это команды:
npm config set prefix ~/.npm
export PATH="$PATH:$HOME/.npm/bin"
Эти команды гарантируют, что все ваши глобальные установки будут происходить в указанной директории. Важно, чтобы этот каталог принадлежал вашему пользователю.
В чем разница между тильдой (~) и каретом (^) в package.json?
Как удалить модули npm в Node.js?
Как предотвратить установку "devDependencies" модулей NPM для Node.js (package.json)?
Ошибка "npm WARN package.json: Нет поля repository"
nvm постоянно "забывает" Node.js в новой сессии терминала