Я только что установил 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
sudo chown
: github.com/sindresorhus/guides/blob/master/…Ответы:
Это похоже на проблему с разрешениями в вашем домашнем каталоге. Чтобы восстановить право собственности на каталог .npm, выполните:
источник
whoami
это заполнитель, но он работает буквально как есть, поэтому это должна быть переменная, которую я не понимаю.whoami
гарантируют, что это выполнено правильно и затем помещено в команду chownsudo chown -R simpleascouldbe ~/.npm
Разрешения, которые вы использовали при установке Node, будут необходимы при выполнении таких действий, как запись в каталоге npm (
npm link
,npm install -g
и т. Д.).Вероятно, вы запустили установку узла с правами суперпользователя, поэтому глобальная установка пакета требует, чтобы вы были пользователем root.
Решение 1: NVM
На компьютере разработчика не следует устанавливать и запускать узел с правами 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
Решение 2. Установите пакеты глобально для данного пользователя
Если вы используете OSX или Linux, вы можете создать пользовательский каталог для вашего глобального пакета и установки
npm
иnode
узнать, как найти глобально установленные пакеты.Проверьте эту замечательную статью для пошаговых инструкций по глобальной установке модулей npm без sudo.
См. Также документацию npm по исправлению разрешений npm .
источник
npm ls -gp | awk -F/ '/node_modules/ && !/node_modules.*node_modules/ {print $NF}' | xargs npm -g rm
- Мне пришлось переустанавливать nodejs и в корневой оболочке и удалять их, иначе у вас останутся символические ссылки на yo, grunt и т. Д.sudo npm list -g --depth=0. | awk -F ' ' '{print $2}' | awk -F '@' '{print $1}' | sudo xargs npm remove -g
stackoverflow.com/a/22290968/1449157, а затем удалилnpm
и установил его черезnvm
Также вам понадобится разрешение на запись в
node_modules
каталог:источник
~/tmp
каталог для меня.node_modules
в/usr/local/lib/
. WTF?Then I ran sudo chown -R $USER /* and everything was fine
- НЕТ - вы разрушаете свою машину.Смена владельца "системных глобальных" папок - это взлом. При новой установке я бы сконфигурировал NPM для использования уже доступного для записи местоположения для "пользовательских глобальных" программ:
Затем убедитесь, что вы добавили эту папку в свой путь:
См @ErikAndreas " ответ на модули НПХ не будет устанавливать глобально без Суда и более руководства шага за шагом по @sindresorhus с также наборами
$MANPATH
.источник
$HOME
то, как правило, ваш.profile
скрипт позаботится о$PATH
следующем вашем исходном коде (например, при следующем входе в систему).$HOME
и может помешать другим (будущим?) Файлам / подпапкам NPM. Предпочитают хранить двоичные файлы из разных менеджеров пакетов / языков / систем сборки отдельно и$PATH
вместо этого явно указывать (в сценарии времени входа в систему).~/lib/node_modules
с соответствующими CLI, если таковые существуют, в~/bin
. Для многих пользователей, особенно если они не имеют корня, как~/bin
и~/lib
уже существуют.~/bin
а затем делаете то же самое для одного или двух дополнительных менеджеров пакетов. Это может не произойти ни сегодня, ни завтра, но существует явный риск того, что два пакета от разных менеджеров столкнутся с именами и перезаписывают файлы друг друга. Это достаточно хороший случай для меня, чтобы иметь отдельные префиксы. (Конкретные примеры будут оценены.)Я столкнулся с этим при установке Recess ( https://github.com/twitter/recess ) для компиляции моего CSS для Bootstrap 3.
При установке углубления:
Вам нужно разблокировать разрешения в вашем
home
каталоге, как сказал Ной :Вам также нужны разрешения на запись в
node_modules
каталог, как говорит Xilo , поэтому, если он все еще не работает, попробуйте:Если вы все еще видите ошибки, вам также может потребоваться исправить
/usr/local
разрешения :Обратите внимание, что, как указано в этом посте,
/usr/local/
если вы работаете на Mac, это не системный каталог, поэтому этот ответ на самом деле совершенно «безопасен» для пользователей Mac. Однако, если вы работаете в Linux, смотрите Ответ Кристофера Уилла ниже для многопользовательского, системно-безопасного решения (но более сложного).источник
Осторожно!!! Осторожно!!! Осторожно!!!
chown или chmod это НЕ являются решением проблемы безопасности.
Вместо этого сделайте:
Сначала проверьте, куда указывает npm, если вы звоните:
Если / usr возвращается, вы можете сделать следующее:
Это создаст каталог npm в вашем домашнем каталоге и укажет
npm
на него.Чтобы эти изменения были постоянными, вы должны добавить команду экспорта в ваш .bashrc:
источник
$PATH
, а не саму строку. Вы должны изменить это.Другие ответы предлагают изменить владельца или разрешения системных каталогов для конкретного пользователя. Я очень не одобряю этого, это может стать очень неудобным и может испортить всю систему!
Вот более общий и безопасный подход, который также поддерживает многопользовательский режим.
Создайте новую группу для пользователей-узлов и добавьте в нее нужных пользователей. Затем установите принадлежность узловых файлов / каталогов к этой группе.
Теперь вы можете легко установить свои модули как пользователь
Некоторые модули (grunt, bower, yo и т. Д.) Все равно должны быть установлены как root. Это потому, что они создают символические ссылки в / user / bin /.
редактировать
Через 3 года я бы порекомендовал использовать Node Version Manager . Это сэкономит вам много времени и хлопот.
источник
staff
группу для предоставления разрешений моим папкам разработчиков. Кроме того, рекомендуется запустить программу,chmod g+ws node_modules
чтобы убедиться, что ваша группа имеет разрешение на чтение / запись./usr/lib
находится под контролем вашего системного менеджера пакетов, и вы не должны вносить в него никаких изменений.Официальная документация о том , как исправить
npm install
разрешения сEACCES
ошибкой находится в https://docs.npmjs.com/getting-started/fixing-npm-permissions .Я столкнулся с этой проблемой после новой установки узла с использованием
.pkg
установщика на OSX. Здесь есть несколько отличных ответов, но я еще не видел ссылку на npmjs.com.Вариант 1. Измените разрешение на каталог по умолчанию для npm.
Найдите путь к каталогу npm:
Для многих систем это будет / usr / local .
ВНИМАНИЕ : Если отображаемый путь - просто / usr , переключитесь на Вариант 2 .
Измените владельца каталогов npm на имя текущего пользователя (ваше имя пользователя!):
Это изменяет права доступа к подпапкам, используемым npm и некоторыми другими инструментами ( lib / node_modules , bin и share ).
Вариант 2: изменить каталог по умолчанию для npm на другой каталог
Есть моменты, когда вы не хотите менять владельца каталога по умолчанию, который использует npm (например, / usr ), так как это может вызвать некоторые проблемы, например, если вы делите систему с другими пользователями.
Вместо этого вы можете настроить npm для использования другого каталога. В нашем случае это будет скрытый каталог в нашей домашней папке.
Создайте каталог для глобальных установок:
Сконфигурируйте npm для использования нового пути к каталогу:
Откройте или создайте файл ~ / .profile и добавьте следующую строку:
Вернитесь в командную строку и обновите системные переменные:
источник
/usr/bin/
? Теперь только ваш пользователь может получить к нему доступ. Вы входите в систему как кто-то еще, но у вас все еще нет доступа, так как файлы на самом деле находятся в домашнем каталоге другого пользователя!Как будто нам нужно больше ответов здесь, но в любом случае ..
У Sindre Sorus есть руководство Установка глобальных пакетов npm без sudo на OS X и Linux, в которой рассказывается, как правильно установить, не мешая с разрешениями:
Проверьте источник этого руководства для последних обновлений.
источник
TL; DR
-
При использовании
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
файлов в/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 , проблема была в том, что когда я установил узел, я сделал это с помощью sudo через chris / lea ppa repo .
Моим решением было удалить узел, а затем установить его следующим образом:
Загрузите последние стабильные исходные узлы с сайта nodejs.org # в моем случае node-v0.10.20.tar.gz
PD: Если вы не хотите менять владельца папки / usr / local, вы можете установить ее там, где у вас уже есть. Проблема этого подхода заключается в том, что вам придется связать папку установки с командной строкой bash, чтобы мы могли использовать команду узла позже
С любым из этих подходов вы сможете сделать следующее без использования sudo
источник
sudo chown $USER /use/local
перед сборкой. Выглядит хорошо до сих пор, время, чтобы попытаться построить атом! Спасибо!Когда вы запускаете npm install -g somepackage, вы можете получить ошибку EACCES, требующую повторного запуска команды от имени пользователя root / Administrator. Это проблема с разрешениями.
Это легко исправить , откройте свой терминал (Приложения> Утилиты> Терминал)
** Я настоятельно рекомендую вам не использовать управление пакетами с помощью sudo (sudo npm -g установить что-то), потому что некоторые проблемы могут возникнуть позже **
Ссылка: http://foohack.com/2010/08/intro-to-npm/
источник
sudo chown -R `whoami` ~/.npm
,sudo chown -R `whoami` /usr/local/lib
иДля Mac (взято из ответа Кристопера Уилла)
Mac OS X 10.9.4
Системные настройки> Пользователи и группы> (разблокировать)> нажмите +:
Новая учетная запись> «Группа»
Имя учетной записи: nodegrp
После создания группы отметьте пользователя, который будет включен в эту группу.
источник
sudo
или изменять владельца группы папок, чтобы его мог изменить обычный пользователь? Если обычный пользователь не должен выполнять какие-либо действия с этой папкой, то, конечно, не следует менять владельца группы для этой папки.-H
флагом. В частности,sudo -H npm install -g <pkg>
. Это обеспечивает правильное разграничение разрешений для системных и пользовательских папок. То, что вы не хотите делать, это использоватьsudo npm install -g
, потому что это устанавливает файлы, принадлежащие пользователю root, в ваш пользовательский каталог. Было бы замечательно, если бы npm были достаточно умны, чтобы сделать это правильно, но это не так, поэтому вы должны использовать-H
флаг sudo для правильной установки глобально.В моем случае это из-за разрешения ~ / tmp. Поэтому я делаю:
И это нормально!
источник
Для меня только выполнить
не работает Тогда я тоже выполняю
И все работает отлично!
источник
/usr/lib
являются системными файлами и не должны принадлежать вашей личной учетной записи пользователя.ВОПРОС : У вас (пользователя) нет прав доступа к каталогу.
Мгновенный выход - запустить установку npm с помощью sudo, но это может привести к той же ошибке или неправильной установке.
И изменение владельца каталога не является хорошим вариантом, временным патчем.
Решение / предложение : изменить каталог по умолчанию для npm (из официальных документов )
Сделайте резервную копию вашего компьютера, прежде чем двигаться вперед.
(необязательно) В случае ошибочной установки сначала удалите ее:
Создайте каталог для глобальных установок:
mkdir ~/.npm-global
Сконфигурируйте npm для использования нового пути к каталогу:
npm config set prefix '~/.npm-global'
Откройте или создайте файл
~/.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.
Откройте терминал:
Введите эту команду:
Это решение позволяет получить разрешение ТОЛЬКО на нужные каталоги, оставляя другие каталоги красивыми и безопасными.
источник
npm config get prefix
то возвращается в домашнюю папку, это решение исправит разрешения, но не решит основную проблему безопасной установки глобальных пакетов для общей среды.Еще одно отличное исправление для правильной настройки NPM - выполните следующие команды:
источник
Вы можете попробовать это, работает на Ubuntu и Mac
источник
Мне кажется, что лучший вариант - это вариант, предложенный в документации по npm , который сначала проверяет, где установлены глобальные модули node_modules по умолчанию
npm config get prefix
. Если вы получите, как я на Трасти,/usr
вы можете изменить его на папку, которую вы можете безопасно хранить, не путая вещи, как я.Для этого выберите или создайте новую папку в своей системе. Возможно, вы захотите иметь его в своем домашнем каталоге или, как и я,
/usr/local
для согласованности, потому что я также пользователь Mac (я предпочитаю не смотреть в разные места в зависимости от машины, перед которой я оказался). Еще одна веская причина для этого - тот факт, что/usr/local
папка, вероятно, уже находится в вашей переменной PATH (если вы не хотите возиться с вашей переменной PATH), но есть вероятность, что ваша вновь созданная папка отсутствует, и вам нужно добавить ее в ПУТЕШЕСТВУЙТЕ в своем профиле .bash или в файле .bashrc .Короче говоря, я изменил расположение глобальных модулей по умолчанию
npm config set prefix '/usr/local'
, создал папку/usr/local/lib/node_modules
(она будет использоваться npm) и изменил разрешения для папок, используемых npm, с помощью команды:Теперь вы можете безопасно установить любой модуль по всему миру. Надеюсь это поможет!
источник
Вот как я решил проблему с Windows 8.1:
источник
Наилучшим решением было бы то, что обеспечено документацией npm.
Для Ubuntu предлагаемое решение - вариант № 2
Краткие шаги:
Создайте каталог для глобальных установок:
mkdir ~/.npm-global
Настройте npm для использования нового пути к каталогу: может помочь вам проверить, был ли префикс обновлен или нет. Результатом будет <Ваш домашний каталог> /. Npm-global
npm config set prefix '~/.npm-global'
npm config get prefix
Откройте или создайте файл ~ / .profile и добавьте следующую строку:
export PATH=~/.npm-global/bin:$PATH
Вернитесь в командную строку и обновите системные переменные:
source ~/.profile
Вместо шагов 2-4 вы также можете использовать соответствующую переменную ENV (например, если вы не хотите изменять ~ / .profile):
NPM_CONFIG_PREFIX=~/.npm-global
Для Mac предлагаем решение вариант № 3
В Mac OS вы можете полностью избежать этой проблемы, используя менеджер пакетов Homebrew
brew install node
источник
Я решаю это путем смены владельца от root до моего имени пользователя
sudo chown -R me:me /home/me/.config/configstore/
измените меня с вашим именем пользователя и группой.
источник
Мне нравится использовать группы Ubuntu для достижения этой цели вместо смены владельца. Это довольно просто.
Сначала установите nodejs и npm, используя apt-get
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
источник
В Mac OS X при установке с помощью Homebrew
brew install npm
путь установки указывается/usr/local/share/npm/
как в подпапках, такbin/
и вlib/node_modules/
подпапках.Выполнение этой команды для смены владельца на пользователя, вошедшего в систему, должно исправить все это и позволить вам устанавливать глобальные пакеты NPM без него
sudo
.OSX доморощенного
источник
npm config
вместо этого.На самом деле, у меня тоже была такая же проблема. Я работал под управлением Ubuntu. Моя проблема возникает из-за того, что я потерял свой открытый ключ Ubuntu. Даже обновление моей системы не происходило. Это давало ошибку GPG. В этом случае вы можете восстановить свой ключ с помощью этой команды:
После этого npm работает нормально!
источник
Джон Папа указывает на историю и причины этой проблемы и дает твердое решение :
Джон Папа предпринимает следующие шаги:
Надеюсь, это поможет любопытным!
источник
Это решение, которое я использовал и работал. Я пытался использовать
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
источник
Ответ @ Yves M. был очень похож на мое решение. Вот команды, которые я использовал, которые немного отличались от его.
Затем запросите последнюю версию:
Затем установите самую новую версию:
пример
источник