15

Как исправить ошибку npm без использования sudo

14

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

25

Похоже, что проблема связана с правами доступа к вашему домашнему каталогу. Чтобы вернуть себе права собственности на директорию .npm, выполните следующую команду:

sudo chown -R $(whoami) ~/.npm
3

Для выполнения данной операции вам также потребуется право на запись в директории node_modules. Вы можете изменить владельца этой папки, выполнив следующую команду:

sudo chown -R $USER /usr/local/lib/node_modules

Эта команда изменит владельца всех файлов и папок в указанной директории на текущего пользователя, что позволит вам устанавливать необходимые модули без проблем с доступом.

1

Внимание!!! Внимание!!! Внимание!!!

Использовать 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, чтобы изменения вступили в силу.

0

Официальная документация по исправлению прав доступа при выполнении npm install с ошибкой EACCES доступна по следующему адресу: https://docs.npmjs.com/getting-started/fixing-npm-permissions.

Я столкнулся с этой проблемой после чистой установки Node.js с использованием установщика .pkg на OSX. Здесь есть несколько отличных ответов, но я не увидел ссылки на npmjs.com.

Вариант 1: Измените права доступа к каталогу по умолчанию npm

  1. Найдите путь к каталогу npm:

    npm config get prefix
    

Для большинства систем это будет /usr/local.

ПРЕДУПРЕЖДЕНИЕ: Если отображаемый путь - это просто /usr, перейдите к Варианту 2.

  1. Измените владельца каталогов 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 на использование совершенно другого каталога. В нашем случае это будет скрытый каталог в нашей домашней директории.

  1. Создайте каталог для глобальных установок:

    mkdir ~/.npm-global
    
  2. Настройте npm на использование нового пути каталога:

    npm config set prefix '~/.npm-global'
    
  3. Откройте или создайте файл ~/.profile и добавьте эту строку:

    export PATH=~/.npm-global/bin:$PATH
    
  4. Возвратитесь в командную строку и обновите ваши системные переменные:

    source ~/.profile
    

Эти шаги помогут вам решить проблему с правами доступа при использовании npm.

0

Я столкнулся с этой проблемой, и хотя действительно ~/.npm должен принадлежать вашему пользователю, npm не устанавливал модули туда.

Что на самом деле решило мою проблему, это команды:

npm config set prefix ~/.npm
export PATH="$PATH:$HOME/.npm/bin"

Эти команды гарантируют, что все ваши глобальные установки будут происходить в указанной директории. Важно, чтобы этот каталог принадлежал вашему пользователю.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь