Npm выдает ошибку без sudo

Я только что установил node и npm через пакет на nodejs.org, и всякий раз, когда я пытаюсь выполнить поиск или установить что-либо с помощью npm, он выдает следующую ошибку, если только я не выполнил команду. У меня такое чувство, что это вопрос с разрешениями? Я уже являюсь администратором.

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

Ответы

Ответ 1

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

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

Ответ 2

Разрешения, которые вы использовали при установке Node, потребуются при выполнении таких npm install -g, как запись в вашем каталоге npm link (npm link npm install -g и т.д.).

Вероятно, вы запустили установку узла с правами суперпользователя, поэтому глобальная установка пакета требует, чтобы вы были пользователем root.


Решение 1: NVM

Не взламывайте разрешения, установите правильный путь.

На компьютере разработчика не следует устанавливать и запускать узел с правами root, иначе такие вещи, как npm link, npm install -g будут нуждаться в таких же разрешениях.

NVM (Node Version Manager) позволяет устанавливать Node без прав root, а также позволяет устанавливать множество версий Node, чтобы легко с ними играть. Идеально подходит для разработки.

  1. Удалите Node (вероятно, потребуется разрешение root). Это может помочь вам.
  2. Затем установите NVM, следуя инструкциям на этой странице.
  3. Установить узел через NVM: nvm install node

Теперь npm link npm install -g больше не потребует от вас прав суперпользователя.

Изменение: см. Также https://docs.npmjs.com/getting-started/fixing-npm-permissions


Решение 2. Установите пакеты глобально для данного пользователя

Не взламывайте разрешения, устанавливайте пакеты npm по всему миру правильным способом.

Если вы работаете в OSX или Linux, вы можете создать пользовательский каталог для вашего глобального пакета и настроить npm и node чтобы узнать, как найти глобально установленные пакеты.

Посмотрите эту замечательную статью для пошаговых инструкций по глобальной установке модулей npm без sudo.

См. Также: документация по npm об исправлении разрешений npm.

Ответ 3

Также вам понадобится разрешение на запись в каталоге node_modules:

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

Ответ 4

Изменение владельца в папках "system-global" - это взлом. При новой установке я бы настроил NPM на использование уже доступного для записи местоположения для "пользовательских глобальных" программ:

npm config set prefix ~/npm

Затем убедитесь, что вы добавили эту папку в свой путь:

export PATH="$PATH:$HOME/npm/bin"

Посмотрите @ErikAndreas ответ на модули NPM, выигранные 'установить глобально без sudo и более продолжительное пошаговое руководство @sindresorhus с также множествами $MANPATH.

Ответ 5

Я столкнулся с этим при установке Recess (https://github.com/twitter/recess), чтобы скомпилировать мой CSS для Bootstrap 3.

При установке выемки:

-npm install recess -g
  • Вам нужно разблокировать разрешения в каталоге home, например Noah. говорит:

    sudo chown -R `whoami` ~/.npm
    
  • Вам также нужны права на запись в каталог node_modules, например Xilo. говорит, поэтому, если он все еще не работает, попробуйте:

    sudo chown -R `whoami` /usr/local/lib/node_modules
    
  • Если вы все еще видите ошибки, вам также может потребоваться правильные разрешения /usr/local:

    sudo chown -R `whoami` /usr/local
    

Обратите внимание, что как указано в этом сообщении /usr/local/ на самом деле не является системным каталогом, если вы на Mac, поэтому этот ответ на самом деле отлично "безопасным" для пользователей Mac. Однако, если вы находитесь в Linux, см. Christopher Will ниже для многопользовательского безопасного, безопасного для системы (но более сложного) решения.

Ответ 6

Смотреть OUT !!! СмотретьOUT !!! СмотретьOUT !!!

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 на него.

Чтобы эти изменения были постоянными, вы должны добавить команду экспорта в ваш .bashrc:

echo -e "export NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=\$PATH:~/.npm-global/bin" >> ~/.bashrc

Ответ 7

Другие ответы предлагают изменить владельца или разрешения системных каталогов для конкретного пользователя. Я очень не одобряю этого, это может стать очень неловким и может испортить всю систему!

Вот более общий и безопасный подход, который также поддерживает многопользовательский режим.

Создайте новую группу для пользователей-узлов и добавьте в нее нужных пользователей. Затем установите принадлежность узловых файлов/каталогов к этой группе.

# Create new group
sudo groupadd nodegrp 

# Add user to group (logname is a variable and gets replaced by the currently logged in user)
sudo usermod -a -G nodegrp 'logname'

# Instant access to group without re-login
newgrp nodegrp

# Check group - nodegrp should be listed as well now
groups

# Change group of node_modules, node, npm to new group 
sudo chgrp -R nodegrp /usr/lib/node_modules/
sudo chgrp nodegrp /usr/bin/node
sudo chgrp nodegrp /usr/bin/npm

# (You may want to change a couple of more files (like grunt etc) in your /usr/bin/ directory.)

Теперь вы можете легко установить свои модули как пользователь

npm install -g generator-angular

Некоторые модули (grunt, bower, yo и т.д.) По-прежнему должны быть установлены от имени пользователя root. Это потому, что они создают символические ссылки в /user/bin/.

редактировать

Через 3 года я бы порекомендовал использовать Node Version Manager. Это сэкономит вам много времени и хлопот.

Ответ 8

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

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

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

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

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

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

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

    export PATH=~/.npm-global/bin:$PATH
    
  • В командной строке обновите системные переменные:

    source ~/.profile
    

Ответ 9

Как будто нам нужно больше ответов здесь, но в любом случае..

Sindre Sorus имеет руководство Установите пакеты npm по всему миру без sudo на OS X и Linux, в котором излагаются, как выполнить чистую установку без конфликтов с разрешениями:

Вот способ установки пакетов по всему миру для данного пользователя.

  • Создайте каталог для глобальных пакетов

    mkdir "${HOME}/.npm-packages"
    
  • Ссылка на этот каталог для будущего использования в вашем .bashrc/.zshrc:

    NPM_PACKAGES="${HOME}/.npm-packages"
    
  • Укажите, где хранить ваш глобально установленный пакет. В файле $HOME/.npmrc добавьте:

    prefix=${HOME}/.npm-packages
    
  • Убедитесь, что node найдет их. Добавьте следующее в свой .bashrc/.zshrc:

    NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
    
  • Убедитесь, что вы найдете установленные двоичные файлы и справочные страницы. Добавьте к вашему .bashrc/.zshrc следующее:

    PATH="$NPM_PACKAGES/bin:$PATH"
    # Unset manpath so we can inherit from /etc/manpath via the `manpath`
    # command
    unset MANPATH # delete if you already modified MANPATH elsewhere in your config
    MANPATH="$NPM_PACKAGES/share/man:$(manpath)"
    

Зайдите npm-g_nosudo для автоматического выполнения указанных шагов

Оформить источник этого руководства для получения последних обновлений.

Ответ 10

TL; DR

всегда используйте sudo -i или sudo -H при запуске npm install для установки глобальных пакетов.

-

Когда вы используете npm он загружает пакеты в ваш домашний каталог пользователя. Когда вы запускаете как sudo, npm устанавливает файлы в тот же каталог, но теперь они принадлежат пользователю root.

Вот что происходит с абсолютно каждым человеком, который когда-либо использовал npm:

  • установить некоторые локальные пакеты без проблем, используя npm install foo
  • установить глобальный пакет с помощью sudo install -g foo-cli без проблем
  • попытаться установить локальный пакет с npm install bar
  • разочароваться в дизайнерах npm теперь, когда вам нужно снова перейти в каталог chmod

Когда вы используете параметр -i или -H с sudo, ваш домашний каталог будет root домашним каталогом. Любые глобальные установки будут кэшировать пакеты в /root/.npm вместо root файлов -owned в /home/me/.npm.

Просто всегда используйте sudo -i или sudo -H при запуске npm install для установки глобальных пакетов, и ваши проблемы с разрешениями npm исчезнут.

Для блага.

http://hood.ie/blog/why-you-shouldnt-use-sudo-with-npm.html

- qv принятый ответ для исправления уже трахнутого npm.

Ответ 11

У меня была аналогичная проблема в Модули NPM не будут устанавливаться глобально без sudo, проблема заключалась в том, что , когда я установил node, я сделал это с sudo через chris/lea ppa repo.

Моим решением было удалить node, а затем установить его следующим образом:

Загрузите последние стабильные источники node from nodejs.org # в моем случае node -v0.10.20.tar.gz

tar -zxf node -v0.10.20.tar.gz #uncompress sources

cd node -v0.10.20 #enter несжатая папка

sudo chown $USER -R/usr/local

./configure --prefix =/usr/local && & & make && make install

PD: Если вы не хотите изменять право собственности на/usr/локальную папку, вы можете установить ее там, где вы уже владеете. Проблема такого подхода заключается в том, что вам придется привязать папку установки с командной строкой bash, чтобы мы могли использовать команду node позже в

mkdir ~/opt

./configure --prefix = ~/opt && & make && make install

echo 'export PATH = ~/opt/bin: ${PATH}' → ~/.bashrС#or ~/.profile или ~/.bash_profile или ~/.zshenv в зависимости от текущей Оперативной системы

При любом из этих подходов вы сможете сделать следующее без использования sudo

npm install -g module_to_install

Ответ 12

Когда вы запускаете npm install -g somepackage, вы можете получить ошибку EACCES с просьбой снова запустить команду в качестве администратора root/Administrator. Это проблема с разрешениями.

Он легко исправить, откройте свой терминал (Приложения > Утилиты > Терминал)

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

** Я настоятельно рекомендую вам не использовать управление пакетами с помощью sudo (sudo npm -g install something), потому что вы можете получить некоторые проблемы позже **

Ссылка: http://foohack.com/2010/08/intro-to-npm/

Ответ 13

Для Mac (принята от Кристофера ответит)

Mac OS X 10.9.4

  • Системные предпочтения > Пользователи и группы > (разблокировка) > нажмите +:

    Новая учетная запись > "Группа"
     Имя учетной записи: nodegrp

    После создания группы отметьте пользователя, который будет включен в эту группу.

  • sudo chgrp -R nodegrp/usr/local/lib/ node_modules/
        sudo chgrp nodegrp/usr/bin/node
        sudo chgrp nodegrp/usr/bin/npm
        sudo chown -R $(whoami): nodegrp ~/.npm

Ответ 14

В моем случае это из-за разрешения ~/tmp.So я делаю:

sudo chown -R $USER ~/tmp

И это нормально!

Ответ 15

Для меня выполните только

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

не работает. Затем я тоже выполняю

sudo chown -R $(whoami) /usr/lib/node_modules/
sudo chown -R $(whoami) /usr/bin/node
sudo chown -R $(whoami) /usr/bin/npm

И все работает отлично!

Ответ 16

ПРОБЛЕМА: У вас (пользователя) нет прав доступа к каталогу.

Мгновенный выход - запустить установку npm с помощью sudo, но это может привести к той же ошибке или неправильной установке.

И изменение владельца каталога не является хорошим вариантом, временным патчем.


Решение/предложение: Изменить каталог по умолчанию npm (из официальных документов)

Сделайте резервную копию вашего компьютера, прежде чем двигаться вперед.

(необязательно) В случае ошибочной установки сначала удалите ее:

npm uninstall <package-name>  # use sudo if you used it while installation
npm cache verify  # or, npm cache clean for npm version below 5.x.x 
  1. Создайте каталог для глобальных установок:

    mkdir ~/.npm-global

  2. Настройте npm для использования нового пути к каталогу:

    npm config set prefix '~/.npm-global'

  3. Откройте или создайте файл ~/.profile или ~/.bash_profile и добавьте ~/.bash_profile строку:

    export PATH=~/.npm-global/bin:$PATH

  4. Вернитесь в командную строку, обновите системные переменные или перезапустите терминал:

    source ~/.profile

  5. (необязательно) Тест: загрузите пакет глобально без использования sudo.

    npm install -g jshint

Ответ 17

В случае, если sudo chown -R $(whoami) ~/.npm не работает, или вам нужно нетерминальное решение команд.

Проблема в том, что ваша учетная запись пользователя не имеет разрешения на запись в папку node_modules, поэтому вы можете сделать следующее

  1. Откройте искатель и нажмите cmd + shift + g это откроет перейти в папку с URL

  2. Запишите следующий путь /usr/local/lib/node_modules и нажмите go

  3. Щелкните правой кнопкой мыши по папке node_modules и выберите Get Info

  4. Прокрутите вниз до sharing & permissions

  5. Разблокировать, чтобы иметь возможность вносить изменения.

  6. Нажмите + и добавьте свою учетную запись

  7. Убедитесь, что вы выбрали " Read & Write в раскрывающемся списке привилегий

Теперь вы должны иметь возможность устанавливать пакеты без sudo и проблемы с разрешениями должны быть решены

Ответ 18

Еще одно замечательное решение для правильной настройки NPM, выполните следующие команды:

npm config set prefix '~/.npm_packages'
PATH=$PATH:$HOME/.npm_packages/bin; export PATH

Ответ 19

Если во время установки npm появляется что-то вроде ниже или хотите установить пакеты по всему миру на Mac, используйте Sudo

npm ERR! код EACCES
npm ERR! errno -13
npm ERR! доступ к syscall

Ответ 20

Вот как я решил проблему в Windows 8.1:

  • Перейдите к установке nodejs (обычно C:\Program Files\nodejs)
  • Щелкните правой кнопкой мыши папку node_modules и перейдите к свойствам
  • Перейдите на вкладку Безопасность и расширенный
  • В верхней части вы увидите "Владелец: СИСТЕМА", нажмите "Изменить"
  • Введите пользователя, для которого вы хотите получить разрешения, и нажмите Ok
  • Установите флажок в нижней части расширенных настроек. "Замените все записи прав на дочерние объекты наследуемыми правами доступа от этого объекта" и нажмите "ОК"
  • Выполняйте любую установку/обновление npm.

Ответ 21

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

Решение: Разрешить разрешение для npm.

Откройте терминал:

command + пробел, затем введите 'terminal'

Введите эту команду:

sudo chown -R $(whoami) $(npm config get префикс)/{Библиотека/ node_modules, бин, доля}

  • Примечание: для этого потребуется ваш пароль.

Это решение позволяет разрешать ТОЛЬКО нужные каталоги, сохраняя другие каталоги приятными и безопасными.

Ответ 22

В Mac OS X при установке Homebrew brew install npm путь установки /usr/local/share/npm/ с bin/ и lib/node_modules/ подпапки.

Запуск этой команды для изменения владельца для вашего текущего пользователя должен исправить все это и разрешить установку глобальных пакетов NPM без sudo.

sudo chown -R $USER ~/.npm /usr/local/share/npm/

Ответ 23

Собственно, у меня была такая же проблема. Я запускал Ubuntu. Проблема с минами возникает из-за того, что я потерял свой открытый ключ Ubuntu. Даже обновление моей системы не происходило. Это давало ошибку GPG. В этом случае вы можете вернуть свой ключ, используя следующую команду:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <key in GPG error>

После этого npm отлично работает!

Ответ 24

Джон Папа указывает на историю и рассуждения по этой проблеме и дает твердое исправление:

Действия Джона Папы:

  • Используйте brew для установки node без npm
  • Обновите свой .bash_profile/.bashrc, чтобы npm и node знали, где устанавливать и находить пакеты.
  • Используйте brew для обновления node и npm для обновления

Надеюсь, это поможет любопытно!

Ответ 25

Мне кажется, что лучший вариант - это вариант, предложенный в npm documentation, который должен сначала проверить, где глобальные node_modules установленном по умолчанию, запустив npm config get prefix. Если вы получите, как я делаю на Trusty, /usr, вы можете изменить его на папку, в которой вы можете безопасно владеть, не испортив вещи так, как я.

Для этого выберите или создайте новую папку в своей системе. Вы можете захотеть иметь его в своем домашнем каталоге или, как и я, под /usr/local для согласованности, потому что я также являюсь пользователем Mac (мне не нужно искать разные места в зависимости от того, на какой машине я оказался впереди из). Еще одна веская причина заключается в том, что папка /usr/local, вероятно, уже находится в вашем PATH (если вы не хотите, чтобы вы столкнулись с вашим PATH), но, скорее всего, ваша недавно созданная папка отсутствует, и вам нужно будет добавить это самому PATH в вашем .bash-профиле или файле .bashrc.

Короче говоря, я изменил местоположение глобальных модулей по умолчанию с помощью npm config set prefix '/usr/local', создал папку /usr/local/lib/node_modules (она будет использоваться npm) и изменила разрешения для папок, используемых npm, с помощью команды:

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

Теперь вы можете безопасно установить любой модуль в глобальном масштабе. Надеюсь, это поможет!

Ответ 26

Вот несколько шагов после статьи Джона Папа.

  • Установите Node.js из nodejs.org/en/download

  • Обновление до последней версии npm: $ npm install npm -g

  • Создайте новую папку для глобальных пакетов npm $ mkdir ~/.npm-packages

  • Сообщите npm, где их найти/сохранить. $ npm config set prefix ~/.npm-packages

Проверьте установку

Это должно показать версии

node -v 
npm -v

Это должно показать npm и ng без ошибок

npm list -g --depth=0

Надеюсь, это работает для вас, это работает для меня!

Ответ 27

Я решаю это путем смены владельца от root до моего имени пользователя

sudo chown -R me:me/home/me/.config/configstore/

измените меня с вашим именем пользователя и группой.

Ответ 28

Мне нравится использовать группы Ubuntu для достижения этой цели вместо смены владельца. Это довольно просто.

  1. Сначала установите nodejs и npm, используя apt -g et

    sudo apt-get update && sudo apt-get install nodejs npm

  2. Выясните, кто вошел в систему, т.е. имя пользователя, выполните следующую команду, чтобы увидеть его в терминале

    whoami

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

    groups

  4. Запустите следующую, чтобы разрешить доступ зарегистрированному пользователю

    sudo chmod 777 -R/usr/local && sudo chgrp $(whoami) -R/usr/local

  5. Обновите npm и nodejs

    npm install -g npm

Вы настроены, ваш пользователь может запускать команды npm без sudo

Вы также можете обратиться по этой ссылке https://askubuntu.com/a/1115373/687804

Ответ 29

При изменении разрешений для каталога /usr/local/lib/npm_modules не помогает, u должен добавить вашего пользователя в группу (в большинстве случаев это группа staff), которая имеет права rwx для каталога /usr/bin. Поскольку npm пытается сделать symlink с /usr/bin/__package__.

P.S. Не забывайте переориентироваться после изменения группы пользователей.

Ответ 30

Это решение, которое я использовал и работал. Я пытался использовать whoami, никогда не работал.

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

затем

sudo chown -R $USER /usr/local/bin/npm

затем

sudo chown -R $USER /usr/local/bin/node