NPM выдает ошибку без Sudo


Author:  Mich

Если вы знаете о JavaScript, значит, вы знаете о NPM; это менеджер пакетов по умолчанию для Node.js, который представляет собой среду выполнения с открытым исходным кодом. Разработчики используют NPM, потому что он не только обеспечивает простой способ поддержки кода, но также помогает им, когда им приходится делиться им с другими разработчиками, которые могут легко повторно использовать код во время собственной разработки.

Файл NPM или пакет NPM - это не что иное, как логически разделенный повторно используемый код, организованный в виде каталога с некоторыми файлами в нем. Один из файлов, который вы всегда найдете, - это файл package.json, который, помимо прочего, содержит метаданные о пакете. При неправильной установке NPM часто возникают странные проблемы. В этой статье я расскажу о проблеме "выдачи ошибок NPM без sudo", с которой иногда сталкиваются разработчики. Если вы столкнулись с ошибкой, она может выглядеть примерно так:

 npm ERR! Error: EACCES, open '/Users/scott/.npm/-/all/.cache.json' 
 npm ERR! { [Error: EACCES, open '/Users/scott/.npm/-/all/.cache.json'] 
 npm ERR! errno: 3, 
 npm ERR! code: 'EACCES', 
 npm ERR! path: '/Users/scott/.npm/-/all/.cache.json' } 
 npm ERR! 
 npm ERR! Please try running this command again as root/Administrator. 
 
 npm ERR! System Darwin 15.5.0 
 npm ERR! command "node" "/usr/local/bin/npm" "search" "babel" 
 npm ERR! cwd /Users/scott 
 npm ERR! node -v v0.10.4 
 npm ERR! npm -v 1.2.18 
 npm ERR! path /Users/scott/.npm/-/all/.cache.json 
 npm ERR! code EACCES 
 npm ERR! errno 3 
 npm ERR! stack Error: EACCES, open '/Users/scott/.npm/-/all/.cache.json' 
 npm ERR! 
 npm ERR! Additional logging details can be found in: 
 npm ERR! /Users/scott/npm-debug.log 
 npm ERR! not ok code 0 

По сути, всякий раз, когда вы пытаетесь установить или искать что-то через NPM, вы получаете длинный список бесполезных ошибок, а команда, которую вы пытаетесь запустить, не работает. Однако когда вы попробуете это с «sudo», вы получите желаемый результат. Это произойдет, даже если вы вошли в систему как администратор. Эта проблема обычно возникает, когда есть некоторые проблемы с разрешениями и привилегиями, относящимися к вашей установке NPM.

Вы устанавливали NPM с правами суперпользователя? Это может быть одной из причин, по которой вам требуются привилегии root каждый раз, когда вы запускаете команду. Или это также может быть вызвано проблемами с разрешениями в вашем домашнем каталоге, и в этом случае вам придется вернуть право собственности, что является одним из решений, которые я перечислил ниже.

Решение 1. Установите через NVM

«Все в безопасности с правами root» - это не клише и не зря. Когда вы устанавливаете и запускаете узел на машине разработки с правами root, он не укусит вас, пока вы не попытаетесь установить с ним другие пакеты и не столкнетесь с обсуждаемой проблемой.

Диспетчер версий Node , или NVM, - это инструмент, который позволяет разработчикам устанавливать столько версий Node, сколько вам нужно, не требуя при этом прав суперпользователя. Я рекомендую использовать его и выполнить переустановку после удаления текущей установки NPM. Если вы хотите пойти по этому пути, выполните следующие действия:

  1. Запустите терминал и введите следующую команду, чтобы удалить все глобальные модули Node:

     $ npm ls -gp --depth=0 | awk -F/ '/node_modules/ && !/\/npm$/ {print $NF}' | xargs npm -g rm 
    
  2. Перейдите в официальный репозиторий NVM git и следуйте инструкциям по установке NVM. Чтобы убедиться, что NVM установлен успешно, введите команду ниже и посмотрите, является ли вывод номером версии:

     $ nvm --version 
     0.28.0 
    

    Если "nvm" был выведен на консоль, как показано выше, значит, он установлен.

  3. Убедившись, что на вашем устройстве установлен NVM, запустите эту команду, чтобы установить узел:

     $ nvm install stable 
    

Как только вы закончите, попробуйте запустить npm link или выполнить глобальную установку NPM, и вы увидите, что вам больше не требуются привилегии root для его работы.

Решение 2. Принятие права собственности

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

После настройки запустите терминал и введите следующую команду:

 $ sudo chown -R $(whoami) ~/.npm 

Часть $(whoami) возьмет ваше имя пользователя и поместит его в команду, что сделает вас владельцем всех файлов / папок в ~/.npm .

Когда вас попросят ввести пароль, продолжайте. Как только вы закончите, попробуйте снова установить или выполнить поиск через NPM и посмотреть, сохраняется ли проблема; этого не должно быть.

Решение 3. Удалите все модули NPM и переустановите глобально с правами root.

Если вы являетесь пользователем Linux или OSX, вы также можете создать специальный каталог для хранения вашего глобального пакета. Затем вы можете настроить NPM и узел, чтобы самостоятельно находить глобально установленные пакеты. Чтобы выполнить глобальную установку для определенного пользователя (без привилегий root), выполните следующие действия:

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

     $ mkdir "${HOME}/.npm-packages" 
    
  2. Перейдите в файл "~ / .npmrc" и добавьте его в конец:

     prefix=${HOME}/.npm-packages 
    
  3. Перейдите к вашим файлам ".bashrc" или ".zshrc" и добавьте:

     NPM_PACKAGES="${HOME}/.npm-packages" 
     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 
    
     export MANPATH="$NPM_PACKAGES/share/man:$(manpath)" 
    

Это гарантирует, что NPM легко найдет страницы руководства и установленные двоичные файлы.

Примечание. Для пользователей Mac файл «.bashrc» часто не существует, и терминал получает свои параметры из других файлов, таких как файлы «.profile» или «bash_profile». В таком сценарии добавьте следующую строку в конец любого из вышеупомянутых файлов, чтобы убедиться, что терминал также включает файл «.bashrc»:

 $ source ~/.bashrc 

Если вы не хотите выполнять описанные выше действия вручную, то можете проверить хороший сценарий оболочки npm-g_nosudo , который выполняет все эти действия автоматически за вас.

Заключение

Я уверен, что после того, как вы попробуете одно из вышеперечисленных решений, у вас больше не должно возникнуть проблемы с этой ошибкой. Если у вас есть выбор, я настоятельно рекомендую использовать NVM для установки разных версий Node / NPM. Он не только решит вашу проблему с использованием NPM с sudo, но также позволит вам легко установить и переключаться между несколькими версиями Node / NPM во время разработки. Для меня это, мягко говоря, спасение.

Сообщите нам в комментариях, как все сложилось для вас!

node  npm  unix 

Смотрите также