npm выдает ошибку без sudo
Я только что установил node и 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
30 ответов
Это похоже на проблему с разрешениями в вашем домашнем каталоге. Чтобы вернуть себе право собственности на .npm выполнить:
sudo chown -R $(whoami) ~/.npm
разрешения, которые вы использовали при установке узла, потребуются при выполнении таких вещей, как запись в вашем НПМ каталог (npm link
, npm install -g
, etc.).
вероятно, вы выполнили установку узла с правами root, поэтому глобальная установка пакета просит вас быть root.
Решение 1: NVM
не взламывайте с разрешениями, установите узел правильным образом.
на машине развития, вы не должны устанавливать и запускать узел с правами root, в противном случае такие вещи, как npm link
, npm install -g
нужны те же разрешения.
NVM (Node Version Manager) позволяет установить узел без корневых разрешений, а также позволяет установить множество версий узла, чтобы легко играть с ними.. Идеально подходит для развития.
- удалить узел (вероятно, потребуется разрешение root). этой может помочь вы.
- установить NVM следующим инструкциям на этой странице.
- установить узел через NVM:
nvm install node
теперь npm link
, npm install -g
больше не требует, чтобы Вы были root.
Edit: см. Также https://docs.npmjs.com/getting-started/fixing-npm-permissions
решение 2: Установите пакеты глобально для данного пользователя
не рубить с разрешения, установите пакеты npm глобально правильным способом.
если вы находитесь на OSX или Linux, вы можете создайте выделенный каталог пользователя для вашего глобального пакета и настройка npm
и node
чтобы знать, как найти глобально установленные пакеты.
проверить эту большую статью для пошаговых инструкций по установке модулей npm глобально без sudo.
см. также: документация npm по исправление разрешений npm.
я столкнулся с этим при установке выемки (https://github.com/twitter/recess) для компиляции моего CSS для Bootstrap 3.
при установке амбразуру:
-npm install recess -g
-
вам нужно разблокировать разрешения в вашем Будетответ ниже для мульти-потребителя дружелюбного, система dir безопасное (но более сложное) решение.
изменение владельца в папках "system-global" - это взлом. При новой установке я бы настроил NPM для использования уже записываемого местоположения для" пользовательских глобальных " программ:
npm config set prefix ~/npm
затем убедитесь, что вы добавить эту папку в Path:
export PATH="$PATH:$HOME/npm/bin"
посмотреть @ErikAndreas' ответ to модули NPM не будут устанавливаться глобально без sudo
и больше шаг за шагом руководство by @sindresorhus С наборы $MANPATH
.
другие ответы предлагают изменить права собственности или разрешения системных каталогов для конкретного пользователя. Я очень не хочу этого делать, это может стать очень неудобным и может испортить всю систему!
вот более общий и безопасный подход, который также поддерживает многопользовательский режим.
создайте новую группу для пользователей узлов и добавьте в нее требуемых пользователей. Затем установите для этого право собственности на зависимые от узла файлы / каталоги группа.
# 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 etc.) по-прежнему необходимо будет установить как root. Это связано с тем, что они создают символические ссылки в /user/bin/.
редактировать
3 лет спустя я бы рекомендовал использовать Узел Manager Версии. Это избавит вас от многих проблем и времени.
Берегись!!! Берегись!!! Берегись!!!
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
на официальная документация о том, как исправить npm install
разрешения с EACCES
ошибка находится в https://docs.npmjs.com/getting-started/fixing-npm-permissions.
я столкнулся с этой проблемой после установки узла с помощью .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 config set prefix '~/.npm-global'
-
открыть или создать файл ~/.файл профиля и добавьте это строка:
export PATH=~/.npm-global/bin:$PATH
-
в командной строке обновите системные переменные:
source ~/.profile
как будто нам нужно больше ответов здесь, но в любом случае..
у Синдре Соруса есть гид установите пакеты npm глобально без sudo на OS X и Linux изложение того, как чисто установить без возни с разрешениями:
вот способ установки пакетов глобально для данного пользователя.
создайте каталог для ваших глобальных пакетов
mkdir "${HOME}/.npm-packages"
ссылка на этот каталог для будущее использование в вашем .bashrc и/.zshrc:
NPM_PACKAGES="${HOME}/.npm-packages"
укажите npm, где хранить глобально установленный пакет. В добавить:
prefix=${HOME}/.npm-packages
убедитесь, что узел найдет их. Добавьте следующее к вашему .bashrc и/.zshrc:
NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
убедитесь, что вы найдете установленные двоичные файлы и man-страницы. Добавьте к вашему
.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 для выполнения вышеуказанных шагов автоматически
оформить заказ источник этого руководства последние обновления.
при запуске 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/
судо команда chgrp nodegrp / usr/bin / node
sudo chgrp nodegrp/usr/bin / npm
sudo chown-R $(whoami): nodegrp ~/.npm
TL; DR
всегда использовать
sudo -i
илиsudo -H
при работеnpm install
для установки глобальных пакетов.
--
при использовании npm
он загружает пакеты в домашний каталог пользователя. Когда вы работаете как sudo,npm
устанавливает файлы в тот же каталог, но теперь они принадлежат корню.
так вот что происходит абсолютно с каждым человеком, который когда-либо использовал npm
:
- установить некоторые локальные пакеты без проблем используют
npm install foo
- установите глобальный пакет с помощью
sudo install -g foo-cli
без проблем - попытка установить локальный пакет с помощью
npm install bar
- получить разочарование в
npm
дизайнеры, что вам нужноchmod
снова каталог
при использовании -i
или -H
опция с sudo, ваш домашний каталог будет root
домашний каталог. Любые глобальные установки будут кэшировать пакеты в /root/.npm
вместо root
принадлежащего на файлы /home/me/.npm
.
просто всегда использовать sudo -i
или sudo -H
при работе npm install
для установки глобальных пакетов и вашего npm
проблемы с разрешениями исчезнут.
для хорошей.
http://hood.ie/blog/why-you-shouldnt-use-sudo-with-npm.html
--
см. принятый ответ на исправление уже трахал npm
.
У меня была похожая проблема на модули NPM не будут устанавливаться глобально без sudo проблема была в том, что когда я установил узел, я сделал это с sudo через Chris / lea PPA repo.
моим решением было удалить узел, а затем установить его следующим образом:
загрузить последние стабильные источники узлов из nodejs.org #в моем случае node-v0.10.20.смола.gz
узел tar-zxf-v0.10.20.смола.ГЗ #распаковать источники
компакт-диск узел-v0.10.20 #введите несжатую папку
sudo chown $USER-R/usr / local
./configure --prefix=/usr / local && make && make install
PD: если вы не хотите менять владельца папки /usr/local, вы можете установить ее где-то, где вы уже владеете. Проблема этого подхода заключается в том, что вам придется связать папку установки с командной строкой bash, чтобы мы могли использовать команду node позже
mkdir ~ / opt
./configure --prefix=~ / opt && make && make install
echo ' export PATH=~ / opt / bin:${PATH}'>>~/.bashrc #or ~/.профиль или./~ bash_profile или ~/.zshenv в зависимости от текущей операционной системы
с любым из этих подходов, вы сможете сделать следующее без использования sudo
npm install - g module_to_install
для меня, выполнение только
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 для хранения глобальных пакетов и команд.
решение: Разрешение для НПМ.
открыть терминал:
command + Пробел, затем введите "terminal"
введите следующую команду:
sudo chown-R $(whoami) $(npm config get префикс) / {lib / node_modules,bin,share}
- Примечание: это потребует ваш пароль.
Это решение позволяет разрешать только необходимые каталоги, сохраняя другие каталоги хорошими и безопасными.
на Mac OS X, при установке с доморощенного тут brew install npm
путь установки /usr/local/share/npm/
С bin/
и lib/node_modules/
подпапках.
запуск этой команды для перехода на владельца к текущему зарегистрированному пользователю должен исправить все это и позволить вам установить глобальные пакеты NPM без sudo
.
sudo chown -R $USER ~/.npm /usr/local/share/npm/
вот как я решил проблему в Windows 8.1:
- перейдите к установке nodejs (обычно C:\Program Files\nodejs)
- щелкните правой кнопкой мыши папку node_modules и перейдите в свойства
- перейдите на вкладку Безопасность и дополнительно
- вверху вы увидите "владелец: система", нажмите change
- введите пользователя, для которого требуется разрешение, и нажмите Ok
- установите флажок в нижней части дополнительных настроек " заменить все дочерние объекты записи разрешений с наследуемыми записями разрешений из этого объекта " и нажмите ok
- сделайте все, что вам нужно установить/обновить npm
в случае sudo chown -R $(whoami) ~/.npm
не работает для вас, или вам нужно не решение команды терминала.
проблема в том, что у вашей учетной записи пользователя нет разрешения на запись в папку node_modules, поэтому вы можете сделать следующее
откройте finder и нажмите
cmd
+shift
+g
откроется перейти в папку с urlнапишите следующий путь
/usr/local/lib/node_modules
и нажмите goПравой Кнопкой Мыши на
на самом деле, у меня тоже была такая же проблема. Я запускал Ubuntu. Моя проблема возникает потому, что я потерял свой открытый ключ Ubuntu. Даже обновление моей системы не происходило. Это давало ошибку GPG. В этом случае вы можете вернуть свой ключ, используя следующую команду:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <key in GPG error>
после этого npm работает нормально!
Джон папа указывает на историю и рассуждения по этому вопросу и дает солидный исправление:
шаги Джона папы:
- используйте brew для установки узла без npm
- обновить .файл/.bashrc, чтобы npm и узел знали, где установить и найти пакеты
- используйте brew для обновления узла и npm для обновления себя
надеюсь, это поможет любопытным!
Если что-то вроде ниже всплывает во время установки npm или хотите установить пакеты глобально на Mac используйте Sudo
НПМ ERR! код значение eacces
НПМ ошибается! errno -13
НПМ ошибается! системный вызов к
вопрос: у вас (пользователя) нет правильного набора разрешений для каталога.
мгновенный выход-запустить установку npm с помощью sudo, но это может дать вам ту же ошибку или неправильную установку.
и изменение владельца каталога не является хорошим вариантом, временным исправлением.
решение/предложение: изменение каталога npm по умолчанию (из официального docs)
резервное копирование компьютера перед перемещением вперед.
(необязательно) если у вас неправильная установка, сначала удалите ее:
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 config set prefix '~/.npm-global'
-
открыть или создать
~/.profile
или~/.bash_profile
файл и добавьте эту строку:export PATH=~/.npm-global/bin:$PATH
-
вернитесь в командную строку, обновите системные переменные или перезапустите терминал:
source ~/.profile
-
(необязательно) тест: загрузите пакет глобально без использования sudo.
npm install -g jshint
при изменении разрешений для каталога /usr/local/lib/npm_modules
не помогает, u должен добавить пользователя в группу (в большинстве случаев это staff
group), который имеет права rwx для
это решение я использовал и работал. Я попытался использовать 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
еще одно отличное исправление здесь, чтобы правильно настроить NPM, выполните следующие команды:
npm config set prefix '~/.npm_packages'
PATH=$PATH:$HOME/.npm_packages/bin; export PATH
@Yves M. ответ был очень похож на мое решение. Вот команды, которые я использовал, которые немного отличались от его.
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash
затем запросить последнюю версию:
nvm ls-remote
затем установите новую версию:
nvm install YOUR_VERSION_HERE
пример
nvm install v5.8.0
что мне кажется лучшим вариантом, это тот, который предлагается в документация npm, который должен сначала проверить, где установлены глобальные node_modules по умолчанию, запустив npm config get prefix
. Если вы получите, как я делаю на Trusty,/usr
, вы можете изменить его на папку, которой вы можете безопасно владеть, не испортив все так, как я.
для этого выберите или создайте новую папку в вашей системе. Вы можете иметь его в своем домашнем каталоге или, как и я, под /usr/local
для согласованности, потому что я также пользователь Mac (я предпочитаю не смотреть в разные места в зависимости от машины, перед которой я оказался). Еще одна веская причина для этого - тот факт, что /usr/local
папка, вероятно, уже в вашем пути (если вы не хотите возиться с вашим путем), но, скорее всего, ваша недавно созданная папка не является, и вам нужно будет добавить ее в путь самостоятельно на вашем .Баш-профиль или .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}
теперь вы можете глобально установить любой модуль безопасно. Надеюсь, это поможет!
Я не беру на себя ответственность за это решение. Спасибо этому парню: https://gist.github.com/isaacs/579814
# take ownership of the folders that npm/node use
# please don't do this if you don't know what it does!
sudo mkdir -p /usr/local/{share/man,bin,lib/node,include/node}
sudo chown -R $USER /usr/local/{share/man,bin,lib/node,include/node}
# now just a pretty vanilla node install
# let it use the default paths, but don't use sudo, since there's no need
mkdir node-install
curl http://nodejs.org/dist/node-v0.4.3.tar.gz | tar -xzf - -C node-install
cd node-install/*
./configure
make install
# now the npm easy-install
curl https://www.npmjs.org/install.sh | sh
и потом ...
sudo chown -R web:web /home/web/api/
sudo runuser -l web -c 'npm install --prefix /home/web/api'
таким образом, узел никогда не работает как root, и ваш пользователь может установить без sudo.
вы можете попробовать это
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}