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) позволяет установить узел без корневых разрешений, а также позволяет установить множество версий узла, чтобы легко играть с ними.. Идеально подходит для развития.

  1. удалить узел (вероятно, потребуется разрешение root). этой может помочь вы.
  2. установить NVM следующим инструкциям на этой странице.
  3. установить узел через 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
  1. вам нужно разблокировать разрешения в вашем Будетответ ниже для мульти-потребителя дружелюбного, система 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 по умолчанию каталог

  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 config set prefix '~/.npm-global'
    
  3. открыть или создать файл ~/.файл профиля и добавьте это строка:

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

    source ~/.profile
    

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

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

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

  1. создайте каталог для ваших глобальных пакетов

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

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

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

    NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
    
  5. убедитесь, что вы найдете установленные двоичные файлы и 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), потому что вы можете получить некоторые проблемы позже **

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


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

Mac OS X 10.9.4

  1. Системные настройки > Пользователи и группы > (разблокировка) > нажмите +:

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

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

  2. 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


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

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 для хранения глобальных пакетов и команд.

решение: Разрешение для НПМ.

открыть терминал:

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/

osx доморощенного


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

  • перейдите к установке nodejs (обычно C:\Program Files\nodejs)
  • щелкните правой кнопкой мыши папку node_modules и перейдите в свойства
  • перейдите на вкладку Безопасность и дополнительно
  • вверху вы увидите "владелец: система", нажмите change
  • введите пользователя, для которого требуется разрешение, и нажмите Ok
  • установите флажок в нижней части дополнительных настроек " заменить все дочерние объекты записи разрешений с наследуемыми записями разрешений из этого объекта " и нажмите ok
  • сделайте все, что вам нужно установить/обновить npm

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

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

  1. откройте finder и нажмите cmd + shift + g откроется перейти в папку с url

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

  3. Правой Кнопкой Мыши на


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

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

после этого npm работает нормально!


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

шаги Джона папы:

  1. используйте brew для установки узла без npm
  2. обновить .файл/.bashrc, чтобы npm и узел знали, где установить и найти пакеты
  3. используйте 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 
  1. создайте каталог для глобальных установок:

    mkdir ~/.npm-global

  2. настроить НПМ использовать новый каталог:

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

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

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

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

    source ~/.profile

  5. (необязательно) тест: загрузите пакет глобально без использования 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}