Ответ 1
Это похоже на проблему с разрешениями в вашем домашнем каталоге. Чтобы вернуть права собственности на каталог .npm:
sudo chown -R $(whoami) ~/.npm
Я только что установил 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
Это похоже на проблему с разрешениями в вашем домашнем каталоге. Чтобы вернуть права собственности на каталог .npm:
sudo chown -R $(whoami) ~/.npm
Разрешения, которые вы использовали при установке Node, потребуются при выполнении таких npm install -g
, как запись в вашем каталоге npm link
(npm link
npm install -g
и т.д.).
Вероятно, вы запустили установку узла с правами суперпользователя, поэтому глобальная установка пакета требует, чтобы вы были пользователем root.
Не взламывайте разрешения, установите правильный путь.
На компьютере разработчика не следует устанавливать и запускать узел с правами root, иначе такие вещи, как npm link
, npm install -g
будут нуждаться в таких же разрешениях.
NVM (Node Version Manager) позволяет устанавливать Node без прав root, а также позволяет устанавливать множество версий Node, чтобы легко с ними играть. Идеально подходит для разработки.
nvm install node
Теперь npm link
npm install -g
больше не потребует от вас прав суперпользователя.
Изменение: см. Также https://docs.npmjs.com/getting-started/fixing-npm-permissions
Не взламывайте разрешения, устанавливайте пакеты npm по всему миру правильным способом.
Если вы работаете в OSX или Linux, вы можете создать пользовательский каталог для вашего глобального пакета и настроить npm
и node
чтобы узнать, как найти глобально установленные пакеты.
Посмотрите эту замечательную статью для пошаговых инструкций по глобальной установке модулей npm без sudo.
См. Также: документация по npm об исправлении разрешений npm.
Также вам понадобится разрешение на запись в каталоге node_modules
:
sudo chown -R $USER /usr/local/lib/node_modules
Изменение владельца в папках "system-global" - это взлом. При новой установке я бы настроил NPM на использование уже доступного для записи местоположения для "пользовательских глобальных" программ:
npm config set prefix ~/npm
Затем убедитесь, что вы добавили эту папку в свой путь:
export PATH="$PATH:$HOME/npm/bin"
Посмотрите @ErikAndreas ответ на модули NPM, выигранные 'установить глобально без sudo и более продолжительное пошаговое руководство @sindresorhus с также множествами $MANPATH
.
Я столкнулся с этим при установке 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 ниже для многопользовательского безопасного, безопасного для системы (но более сложного) решения.
Смотреть 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
Другие ответы предлагают изменить владельца или разрешения системных каталогов для конкретного пользователя. Я очень не одобряю этого, это может стать очень неловким и может испортить всю систему!
Вот более общий и безопасный подход, который также поддерживает многопользовательский режим.
Создайте новую группу для пользователей-узлов и добавьте в нее нужных пользователей. Затем установите принадлежность узловых файлов/каталогов к этой группе.
# 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. Это сэкономит вам много времени и хлопот.
Официальная документация о том, как исправить разрешения 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.
Измените владельца каталогов 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
Как будто нам нужно больше ответов здесь, но в любом случае..
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 для автоматического выполнения указанных шагов
Оформить источник этого руководства для получения последних обновлений.
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
.
У меня была аналогичная проблема в Модули 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
Когда вы запускаете npm install -g somepackage, вы можете получить ошибку EACCES с просьбой снова запустить команду в качестве администратора root/Administrator. Это проблема с разрешениями.
Он легко исправить, откройте свой терминал (Приложения > Утилиты > Терминал)
sudo chown -R $USER /usr/local/lib/node_modules
** Я настоятельно рекомендую вам не использовать управление пакетами с помощью sudo (sudo npm -g install something), потому что вы можете получить некоторые проблемы позже **
Для 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
В моем случае это из-за разрешения ~/tmp.So я делаю:
sudo chown -R $USER ~/tmp
И это нормально!
Для меня выполните только
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
И все работает отлично!
ПРОБЛЕМА: У вас (пользователя) нет прав доступа к каталогу.
Мгновенный выход - запустить установку 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
Создайте каталог для глобальных установок:
mkdir ~/.npm-global
Настройте npm для использования нового пути к каталогу:
npm config set prefix '~/.npm-global'
Откройте или создайте файл ~/.profile
или ~/.bash_profile
и добавьте ~/.bash_profile
строку:
export PATH=~/.npm-global/bin:$PATH
Вернитесь в командную строку, обновите системные переменные или перезапустите терминал:
source ~/.profile
(необязательно) Тест: загрузите пакет глобально без использования sudo.
npm install -g jshint
В случае, если sudo chown -R $(whoami) ~/.npm
не работает, или вам нужно нетерминальное решение команд.
Проблема в том, что ваша учетная запись пользователя не имеет разрешения на запись в папку node_modules, поэтому вы можете сделать следующее
Откройте искатель и нажмите cmd
+ shift
+ g
это откроет перейти в папку с URL
Запишите следующий путь /usr/local/lib/node_modules
и нажмите go
Щелкните правой кнопкой мыши по папке node_modules
и выберите Get Info
Прокрутите вниз до sharing & permissions
Разблокировать, чтобы иметь возможность вносить изменения.
Нажмите +
и добавьте свою учетную запись
Убедитесь, что вы выбрали " Read & Write
в раскрывающемся списке привилегий
Теперь вы должны иметь возможность устанавливать пакеты без sudo
и проблемы с разрешениями должны быть решены
Еще одно замечательное решение для правильной настройки NPM, выполните следующие команды:
npm config set prefix '~/.npm_packages'
PATH=$PATH:$HOME/.npm_packages/bin; export PATH
Если во время установки npm появляется что-то вроде ниже или хотите установить пакеты по всему миру на Mac, используйте Sudo
npm ERR! код EACCES
npm ERR! errno -13
npm ERR! доступ к syscall
Вот как я решил проблему в Windows 8.1:
Проблема: У вас нет разрешения на запись в каталоги, которые npm использует для хранения глобальных пакетов и команд.
Решение: Разрешить разрешение для npm.
Откройте терминал:
command + пробел, затем введите 'terminal'
Введите эту команду:
sudo chown -R $(whoami) $(npm config get префикс)/{Библиотека/ node_modules, бин, доля}
Это решение позволяет разрешать ТОЛЬКО нужные каталоги, сохраняя другие каталоги приятными и безопасными.
В 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/
Собственно, у меня была такая же проблема. Я запускал Ubuntu. Проблема с минами возникает из-за того, что я потерял свой открытый ключ Ubuntu. Даже обновление моей системы не происходило. Это давало ошибку GPG. В этом случае вы можете вернуть свой ключ, используя следующую команду:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <key in GPG error>
После этого npm отлично работает!
Джон Папа указывает на историю и рассуждения по этой проблеме и дает твердое исправление:
Действия Джона Папы:
Надеюсь, это поможет любопытно!
Мне кажется, что лучший вариант - это вариант, предложенный в 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}
Теперь вы можете безопасно установить любой модуль в глобальном масштабе. Надеюсь, это поможет!
Вот несколько шагов после статьи Джона Папа.
Установите 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
Надеюсь, это работает для вас, это работает для меня!
Я решаю это путем смены владельца от root до моего имени пользователя
sudo chown -R me:me/home/me/.config/configstore/
измените меня с вашим именем пользователя и группой.
Мне нравится использовать группы Ubuntu для достижения этой цели вместо смены владельца. Это довольно просто.
Сначала установите nodejs и npm, используя apt -g et
sudo apt-get update && sudo apt-get install nodejs npm
Выясните, кто вошел в систему, т.е. имя пользователя, выполните следующую команду, чтобы увидеть его в терминале
whoami
Вы можете увидеть список групп, которые вам назначены, с помощью очень простой команды, обычно первая группа - это ваше имя пользователя.
groups
Запустите следующую, чтобы разрешить доступ зарегистрированному пользователю
sudo chmod 777 -R/usr/local && sudo chgrp $(whoami) -R/usr/local
Обновите npm и nodejs
npm install -g npm
Вы настроены, ваш пользователь может запускать команды npm без sudo
Вы также можете обратиться по этой ссылке https://askubuntu.com/a/1115373/687804
При изменении разрешений для каталога /usr/local/lib/npm_modules
не помогает, u должен добавить вашего пользователя в группу (в большинстве случаев это группа staff
), которая имеет права rwx для каталога /usr/bin
.
Поскольку npm пытается сделать symlink
с /usr/bin/__package__
.
P.S. Не забывайте переориентироваться после изменения группы пользователей.
Это решение, которое я использовал и работал. Я пытался использовать 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