npm выдает ошибку без sudo

1024

Я только что установил 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
  • 31
    Пожалуйста, рассмотрите решение с использованием NVM : stackoverflow.com/a/24404451/1480391 (вместо взлома с разрешениями)
  • 4
    Я тоже получаю эту ошибку, и я установил Node и NVM через менеджер пакетов Node .
Показать ещё 8 комментариев
Теги:
permissions
npm
sudo

37 ответов

1931
Лучший ответ

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

sudo chown -R $(whoami) ~/.npm
  • 1
    Да, вот в чем проблема. Благодарю.
  • 1
    Как колдовство. Благодарю.
Показать ещё 47 комментариев
511

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

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

Изменение: см. Также https://docs.npmjs.com/getting-started/fixing-npm-permissions


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

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

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

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

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

  • 1
    Спасибо! Похоже, правильный ответ проверит и скажет.
  • 26
    Из всех опубликованных решений решение NVM здесь дало лучшие результаты для меня. Настоятельно рекомендуем использовать NVM, а не играть с разрешениями.
Показать ещё 23 комментария
400

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

sudo chown -R $USER /usr/local/lib/node_modules
  • 7
    Как и каталог ~/tmp для меня.
  • 109
    Я не знаю, почему это до сих пор вызывает голоса. Смена владельца системных каталогов для конкретного пользователя - очень плохая практика! Пожалуйста, смотрите ответ ниже для других решений (например, создание отдельной группы для пользователей узла).
Показать ещё 14 комментариев
55

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

  • 32
    Это плохая идея. Возможно, вы не хотите, чтобы системные каталоги принадлежали определенному пользователю. Помимо серьезных проблем безопасности это также не совместимо с несколькими пользователями.
  • 2
    Да, но это отличное решение для среды разработки +2, особенно если вы уже установили node.js и вам просто нужно продолжать работу!
Показать ещё 3 комментария
51

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

npm config set prefix ~/npm

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

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

Посмотрите @ErikAndreas ответ на модули NPM, выигранные 'установить глобально без sudo и более продолжительное пошаговое руководство @sindresorhus с также множествами $MANPATH.

  • 0
    Я полностью согласен, за исключением того, что я бы предложил, если вы просто установите префикс $HOME то, как правило, ваш скрипт .profile будет заботиться о $PATH при следующем его источнике (например, при следующем входе в систему).
  • 0
    @JessAustin: Возможно, но это также принесет больше беспорядка в ваш $HOME и может помешать другим (будущим?) Файлам / подпапкам NPM. Предпочитайте хранить двоичные файлы из разных менеджеров пакетов / языков / систем сборки отдельно и вместо этого явно указывайте $PATH (в сценарии времени входа в систему).
Показать ещё 5 комментариев
35

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

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

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

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

  • 2
    Если узел установлен по источникам, хотя многопользовательская проблема будет проблемой, все модули будут работать без использования sudo. Это также очень важно, потому что в случае с модулем yeoman люди не могут обновлять генераторы с помощью sudoing приложения yeoman, так как оно не позволяет выполнять sudo :(
  • 1
    В Linux я обычно использую встроенную группу staff для предоставления разрешений моим папкам разработчиков. Также рекомендуется запустить chmod g+ws node_modules чтобы убедиться, что ваша группа имеет права на чтение / запись.
Показать ещё 2 комментария
19

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

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
  • 0
    я должен только переключиться на вариант 2, если я получил / usr?
  • 3
    использовал это, и это работает.
Показать ещё 1 комментарий
14

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

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

  • Создайте каталог для глобальных установок:

    mkdir ~/.npm-global
    
  • Настройте npm для использования нового пути к каталогам:

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

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

    source ~/.profile
    
  • 1
    Спасибо, этот сработал для меня, так как решение chown не сработало. Вы спасли меня.
  • 0
    я должен только переключиться на вариант 2, если я получил / usr?
Показать ещё 2 комментария
11

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

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 для автоматического выполнения указанных шагов

Оформить источник этого руководства для получения последних обновлений.

  • 2
    TX для редактирования @AndyHayden :) Мой предпочтительный метод предлагается в комментариях выше: используйте NVM! stackoverflow.com/a/24404451/1480391
  • 0
    Мой тоже! ..... :)
Показать ещё 1 комментарий
8

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.

  • 0
    лучшее и простое решение
8

Когда вы запускаете 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/

  • 0
    Ура! этот сделал это со мной! после выполнения других приведенных выше sudo chown -R `whoami` ~/.npm : sudo chown -R `whoami` ~/.npm , sudo chown -R `whoami` /usr/local/lib и
  • 0
    рад, что это помогло вам!
Показать ещё 6 комментариев
6

Для 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

  • 1
    Мне пришлось изменить пару путей к / usr / local / bin, но в остальном это решение отлично работало на моей машине OX X 10.9 - спасибо!
  • 0
    Неправильная практика смены владельца системных каталогов.
5

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

sudo chown -R $USER ~/tmp

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

5

У меня была аналогичная проблема в Модули 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

  • 1
    Я закончил тем, что использовал этот метод. Использовал sudo chown $USER /use/local перед сборкой. Выглядит хорошо, время попытаться построить атом! Спасибо!
3

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

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

  1. Откройте искатель и нажмите 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

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

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

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

  • 0
    Вы очень классный, сэр :)
  • 0
    Файлы в /usr/lib являются системными файлами и не должны принадлежать вашей личной учетной записи пользователя.
2

ПРОБЛЕМА: У вас (пользователя) нет прав доступа к каталогу.

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

    mkdir ~/.npm-global

  2. Настройте npm для использования нового пути к каталогу:

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

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

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

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

    source ~/.profile

  5. (необязательно) Тест: загрузите пакет глобально без использования sudo.

    npm install -g jshint

  • 0
    Это сработало для меня.
2

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

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

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

command + пробел, затем введите 'terminal'

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

sudo chown -R $(whoami) $(npm config get префикс)/{Библиотека/ node_modules, бин, доля}

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

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

  • 0
    Понижающее голосование, потому что установка прав владения системными папками для пользователей является антишаблоном, и это не учитывает этого. В особом случае, npm config get prefix возвращает что-то в домашнюю папку, это решение исправит разрешения, но не решит основную проблему установки глобальных пакетов безопасным способом для общей среды.
2

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

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

В 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/

1

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

npm ERR! код EACCES
npm ERR! errno -13
npm ERR! доступ к syscall

1

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

Действия Джона Папы:

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

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

1

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

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

После этого npm отлично работает!

0

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

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

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

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

    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

0

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

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

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

0

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

  • Установите 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

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

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
  • 0
    Я запустил это и работал на 100% для меня на Mac: sudo chown -R $ (whoami) / usr / local / lib / node_modules
0

Лучшим решением будет this, который предоставляется документацией npm.


Для предлагаемого решения Ubuntu Вариант № 2

Краткие шаги:
Создание каталога для глобальных установок:
mkdir ~/.npm-global

Настройте npm для использования нового пути к каталогам:
npm config set prefix '~/.npm-global'
npm config get prefix может помочь вам проверить, был ли префикс обновлен или нет. Результатом будет < Ваш домашний каталог > /. Npm-global

Откройте или создайте файл ~/.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

  • 0
    Этот NPM_CONFIG_PREFIX не будет работать. Это ошибка в npm-описании. Смотрите мой пост выше, как это сделать правильно: stackoverflow.com/a/41395398/1256697
0

Мне кажется, что лучший вариант - это вариант, предложенный в 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}

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

0

@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

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

npm config set prefix '~/.npm_packages'
PATH=$PATH:$HOME/.npm_packages/bin; export PATH
0

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

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

P.S. Не забывайте переориентироваться после изменения группы пользователей.

-2

Я обнаружил, что если вы только sudo -s ", он просто запускает оболочку с правами root как один шаг", и это действительно работает для меня. Я не знаю, хорошая ли это практика или нет.

Надеюсь, это поможет.

Ссылка: https://apple.stackexchange.com/posts/14423/revisions

-3

Все вышеперечисленное не требуется.

Проблема, с которой я столкнулась, заключалась в использовании -g, когда я запускал NPM. Я не мог понять, как я не получаю папку "npm_module", созданную в моем проекте.

Решением является запуск "NPM init". Это создает папку "package.json" и "npm_module", в которую будут загружены все последующие модули. При запуске npm НЕ используйте -g use -s для обновления вашего файла package.json.

Вот хорошее видео, объясняющее

  • 0
    Для видео требуется платная подписка. Можете ли вы обобщить это и, возможно, указать на бесплатный ресурс? И я предполагаю, что вы имеете в виду «npm», а не «NPM».
  • 0
    Этот ответ не относится к вопросу ОП и содержит ссылку на услугу только по подписке. Если вы найдете решение проблемы, для которой вы не можете найти вопрос StackOverflow, это хорошая возможность создать свой собственный вопрос и ответ.
-4

Я установил учетную запись пользователя как владельца каталога /usr/local, так что он может просто выдавать там обычные команды.

sudo chown -R $USER /usr/local

Ссылка: http://howtonode.org/introduction-to-npm

  • 0
    Это также правильно, так как я получил решимость на моей стороне.
  • 0
    Плохая практика - указывать право владения системными каталогами для вашей личной учетной записи.
-5
sudo chown -R `whoami` /usr/local/lib
  • 0
    Я понизил. Пожалуйста, обратитесь к моему ответу, который я дал @danomarr

Ещё вопросы

Сообщество Overcoder
Наверх
Меню