it-swarm.com.ru

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
1082
Chad

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

Sudo chown -R $(whoami) ~/.npm
1955
Noah

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

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

Правка: См. Также https://docs.npmjs.com/getting-started/fixing-npm-permissions


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

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

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

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

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

519
Yves M.

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

Sudo chown -R $USER /usr/local/lib/node_modules
382
Xilo

Я столкнулся с этим при установке Recess ( https://github.com/Twitter/recess ) для компиляции моего CSS для Bootstrap 3.

При установке углубления:

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

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

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

    Sudo chown -R `whoami` /usr/local
    

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

54
danomarr

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

npm config set prefix ~/npm

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

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

Смотрите @ErikAndreas ' answer to Модули NPM не будут устанавливаться глобально без Sudo и более длинное пошаговое руководство by @sindresorhus с также устанавливает $MANPATH.

54
Joel Purra

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

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

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

# 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 . Это сэкономит вам много времени и хлопот.

35
Christopher Will

Осторожно!!! Осторожно!!! Осторожно!!!  

chown или chmod -НЕ/ решение из-за угрозы безопасности.

Вместо этого сделайте:

Сначала проверьте, куда указывает npm, если вы звоните:

npm config get prefix

Если/usr возвращается, вы можете сделать следующее:

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

Это создаст npm-Direktory в вашем домашнем каталоге и укажет на него npm.

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

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

Официальная документация о том, как исправить разрешения 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.

WARNING: Если отображаемый путь - просто / usr, переключитесь на Option 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 для использования нового пути к каталогу:

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

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

    source ~/.profile
    
15
HoppyKamper

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

У Синдре Соруса есть руководство Глобально устанавливать пакеты npm без Sudo на OS X и Linux в общих чертах объясняется, как выполнить чистую установку без вмешательства в разрешения: 

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

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

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

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

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

    NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
    
  5. Убедитесь, что вы найдете установленные двоичные файлы и справочные страницы. Добавьте следующее к своему .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 для автоматического выполнения вышеупомянутых шагов

_/Проверьте источник этого руководства для последних обновлений.

11
ptim

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

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

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

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

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

8
Juancarlos Rodríguez

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 принадлежащих файлов в /home/me/.npm.

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

Для блага.

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

--q.v. принятый ответ для исправления уже ебаной npm.

8
rich remer

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

Mac OS X 10.9.4 

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

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

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

  2. Sudo chgrp -R nodegrp/usr/local/lib/node_modules /
    Sudo chgrp nodegrp/usr/bin/node
    Sudo chgrp nodegrp/usr/bin/npm
    Судо чоун -R $ (whoami): nodegrp ~/.npm

6
ken

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

Sudo chown -R $USER ~/tmp

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

5
bnPYSse

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

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

Загрузите последние стабильные исходные узлы с сайта 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/local, вы можете установить ее там, где у вас уже есть. Проблема этого подхода заключается в том, что вам придется связать папку установки с командной строкой bash, чтобы мы могли использовать команду узла позже

mkdir ~/opt

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

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

Используя любой из этих подходов, вы сможете делать следующее без использования Sudo.

npm install -g module_to_install

5
HeberLZ

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

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

  1. Откройте Finder и нажмите 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 и проблемы с разрешениями должны быть решены 

3
Amr Labib

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

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

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

3
user3753202

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

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

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

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

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

osxдоморощенный

2
Joel Purra

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

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

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

команда + пробел, затем введите «терминал»

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

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

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

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

2
Matt

ISSUE: у вас (пользователя) нет нужного набора разрешений для каталога.

Мгновенный выход - запустить установку 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 для использования нового пути к каталогу: 

    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

2
Nabeel Ahmed

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

нпм ERR! код EACCES
нпм ERR! errno -13
нпм ERR! доступ к системному вызову

1
Ignatius Andrew

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

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

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

1
sam100rav

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

Джон Папа предпринимает следующие шаги: 

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

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

1
theship

Ответ @ 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
0
Ryan Loggerythm

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

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

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

0
Salem

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

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

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

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

    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

0
Gitesh Dalal

Вот шаги, подробно ...

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

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

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

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

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

# this should show the versions
node -v  
npm -v  
# this should show npm and ng with no errors
npm list -g --depth=0

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

0
Carlos Abraham

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

Постскриптум Не забудьте повторно войти в систему после смены группы пользователей

0
Victor Perov

Это решение, которое я использовал и работал. Я пытался использовать 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

0
Casey Robinson

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

Для этого выберите или создайте новую папку в своей системе. Возможно, вы захотите иметь его в своем домашнем каталоге или, как я, в разделе /usr/local для согласованности, потому что я также пользователь Mac (я предпочитаю не смотреть в разные места в зависимости от машины, перед которой я оказался) , Другой хорошей причиной для этого является тот факт, что папка /usr/local, вероятно, уже находится в вашей переменной PATH (если вы не хотите возиться с вашей переменной PATH), но есть вероятность, что ваша вновь созданная папка отсутствует, и вам нужно добавить ее в ПУТЬ самостоятельно в файле .bash-profile или .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}

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

0
yago

ты можешь попробовать это 

Sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
0
Adeojo Emmanuel IMM

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

npm config set prefix '~/.npm_packages'
PATH=$PATH:$HOME/.npm_packages/bin; export PATH
0
Guillaume Le Mière