Ошибка: EACCES: разрешение запрещено, доступ '/ usr / local / lib / node_modules' реагирует


300

Что может быть причиной ошибки Error: EACCES: permission denied, access '/usr/local/lib/node_modules'?

npm ERR! path /usr/local/lib/node_modules
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall access
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!  { Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/usr/local/lib/node_modules' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/macbookmd101/.npm/_logs/2018-02-21T16_26_08_421Z-debug.log

9
Смотрите официальное руководство NPM о том, как решить эту проблему: docs.npmjs.com/…
Джунейт

Ответы:


492

изменить права доступа к файлу .. как это

сначала проверьте, кто владеет каталогом

ls -la /usr/local/lib/node_modules

он запрещает доступ, потому что папка node_module принадлежит пользователю root

drwxr-xr-x   3 root    wheel  102 Jun 24 23:24 node_modules

так что это нужно изменить, изменив root на вашего пользователя, но сначала запустите команду ниже, чтобы проверить вашего текущего пользователя. Как я могу получить имя активного пользователя через командную строку в OS X?

id -un

ИЛИ

whoami

затем смените владельца

sudo chown -R [owner]:[owner] /usr/local/lib/node_modules

ИЛИ

sudo chown -R ownerName: /usr/local/lib/node_modules

ИЛИ

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

3
Были случаи, когда добавление sudo в команду также не работало. Это сработало для меня и должен быть принят ответ.
Нирой Шр

1
Моя компания использует единый вход Microsoft Active Directory. Таким образом, в имени группы есть косая черта и пробел. Что делает это немного сложнее. Команда, которую я использовал, была sudo chown -R myuser:Company\\Domain\ Users /usr/local/lib/node_modules. Чтобы правильно перечислить название группы я сделал id -gn myuser.
Патрик

44
Это было полезно, но когда я запустил команду для смены владельца, я получил illegal group name. Поэтому я изменил команду на, sudo chown -R ownerName: /usr/local/lib/node_modulesи это сработало.
Мидори

4
Хотя это правильный ответ, я сталкивался с этой проблемой несколько раз, и лучшее решение - использовать nvm. Таким образом, вам не нужно менять владельца файла, используя chown. github.com/nvm-sh/nvm
Roee

1
Вместо изменения разрешения рекомендуется в документации установить npm с nvm. См. Stackoverflow.com/a/59575266/2311074
Адам

106

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

Сделайте резервную копию вашего компьютера. В командной строке в своем домашнем каталоге создайте каталог для глобальных установок:

mkdir ~/.npm-global

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

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

В предпочитаемом вами текстовом редакторе откройте или создайте

~/.profile

файл и добавьте эту строку:

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

В командной строке обновите системные переменные:

source ~/.profile

Чтобы протестировать новую конфигурацию, установите пакет глобально, не используя sudo


18
На мой взгляд, это наименее разрушительный вариант. Это также рекомендуется на сайте npm .
17

В качестве альтернативы, если вы не хотите этого делать npm config set prefix(особенно если вы пишете установщик без полномочий root), вы можете переопределить PREFIXenv var или предоставить --prefixпараметр, оба из которых эквивалентны npm config set prefix. (не уверен, что переопределяет, какой)
SOFe

Это отлично сработало для меня. На мой взгляд, этот ответ делает меньше места для деструктивных ошибок и очень прост для понимания и реализации.
Clockelliptic

1
Это то, что искал! Спасибо.
djangodude

Это рекомендуемое решение на самом деле, и лучшее в долгосрочной перспективе.
Аль-Мотафар

49

Все, что вам нужно сделать, это добавить пользователя USER владельцу / local / lib

sudo chown -R $USER /usr/local/lib

7
Если будущие читатели не понимают разрешений, пожалуйста, обратитесь к официальной документации NPM и исправьте проблему. docs.npmjs.com/… . В частности, будущие читатели, вероятно, должны переустановить npm с помощью менеджера версий узлов (рекомендуется)
ordonezalex

1
Это довольно просто. Это также означает, что вам больше не нужно ни о чем беспокоиться в lib; Вы владеете / usr / local / lib.
Обинна Нненанья,

4
Это не очень хорошее решение. Работая выше, chownвы рискуете разрушить структуру разрешений всей вашей файловой системы.
Ларс

3
Эта команда разрушила все мои разрешения. Нужно восстановить все вещи снова.
Азам Алви

4
Если быть точным, это не добавление владельца. Это изменение в владелец, который является гораздо более разрушительным , чем просто добавление , и почти столь же разрушительным , как sudo chmod -R 777 /.
SOFe

29

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

вот так: sudo npm install

Использование sudo с командой в Linux / UNIX обычно повышает ваши права доступа до уровня суперпользователя. В Windows учетная запись суперпользователя обычно называется «Администратор». В Linux / Unix учетная запись суперпользователя обычно называется «root».

Пользователь root имеет право доступа, изменения или удаления практически любого файла на вашем компьютере. Обычные учетные записи пользователей могут получать доступ, изменять или удалять гораздо меньше файлов. Ограничения обычной учетной записи защищают ваш компьютер от несанкционированных или вредоносных программ или пользователей. Некоторые процессы требуют от вас выполнения действий с файлами или папками, к которым у вас обычно нет прав доступа. Установка программы, к которой имеет доступ каждый, - это одно из следующих действий.

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


57
избегайте использования sudo при установке пакетов npm. Чем глубже вы идете по такому пути, тем сложнее будет исправить его потом. Просто измените права доступа к папке npm, как указано в другом ответе, и живите лучше.
Лукас Лиезис

2
Это может сработать, но со временем это вызовет постоянные проблемы. Избегайте этого, если вы не хотите получать всевозможные ошибки об отказе в разрешении. Вроде отказано в папке кеша npm, отказано в установке и тд.
Лукас Лиезис

1
Этот ответ следует удалить, так как использование sudo перед установкой пакетов создает очень опасный прецедент, если пользователь не понимает разрешения. Пожалуйста, обратитесь к первому ответу, в котором вы один раз меняете владельца основного узла.
SeaWarrior404

19

Я попытался найти решение ответа @okanda, но у меня это не получилось.

Тем не менее, он отлично работал, когда я сделал это для нескольких папок, как указано в этой теме: https://github.com/angular/angular-cli/issues/9676#issuecomment-464857493

sudo chown -R $USER /usr/local/lib/node_modules/
sudo chown -R $USER /usr/local/bin/
sudo chown -R $USER /usr/local/share/

Спасибо, этот ответ помог мне. Ubuntu 18.04.3
bakhti_UZB

Раньше у меня были другие решения, но по какой-то причине все это заняло все рабочие папки. Спасибо. Mac v 10.15.2
Amir5000

1
Безопасно ли работать на рабочем сервере?
Cheezey

16

При установке глобальных пакетов в Ubuntu вам необходимы специальные разрешения на запись во время записи в usr/binпапку. Это из соображений безопасности. Итак, каждый раз, когда вы устанавливаете глобальный пакет, используйте:

sudo npm install -g [package-name]

Для вашего конкретного случая это будет:

sudo npm install -g typescript

14

Похоже, вы столкнулись с проблемами разрешения. Если вы устанавливаете, npm-packagesто, возможно, вы получаете сообщение EACCESоб ошибке при попытке установить пакет глобально. Это означает, что у вас нет разрешения на запись в каталогиnpm используемые для хранения глобальных пакетов и команд.

Попробуйте выполнить команды: sudo chmod u+x -R 775 ~/.npmи , sudo chown $USER -R ~/.npmили вы можете просто запустить любую npmкоманду сsudo , которые должны получить решить вашу проблему.

Если вы устанавливаете npm-packageлокально, то вы должны находиться в локальном каталоге проекта и попробовать sudo npm install <pkg-name>выполнить команду для установки необходимого пакета. Цель использования sudoсостоит в том, что это изменит ваши права владельца, так что вы можете дать текущему пользователю разрешение на запуск.npm команд.

Я бы порекомендовал вам взглянуть на https://docs.npmjs.com/getting-started/fixing-npm-permissions


10

Я пытался установить реагировать экспо и кроме sudo мне пришлось добавить --unsafe-perm

как это. Это решает мою проблему

sudo npm install -g expo-cli --unsafe-perm

@Furquan, большое спасибо ... у меня получилось после того, как попробовал разные решения.
AzeTech

@AzeTech, я рад, что это помогло: D
Furquan

9

Вы можете установить npm через менеджер версий Node или установщик Node. В документах указано:

Мы не рекомендуем использовать установщик Node, поскольку процесс установки Node устанавливает npm в каталог с локальными разрешениями и может вызвать ошибки разрешений при глобальном запуске пакетов npm.

Так как у вас есть ошибка разрешения , вы, вероятно, установили npm через установщик Node, и теперь вам нужно переустановить его с помощью nvm (менеджера версий узлов).

К счастью, это очень просто. Вам даже не нужно удалять текущую версию npm или Node.js.

Все, что вам нужно сделать, это

  1. Установите NVM. Для OSX или Linux Node используйте:

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash

    Это создаст папку nvm в вашем домашнем каталоге.

затем

  1. Установите npm и node.js через nvm. Для этого просто позвоните

    nvm install stable

Теперь вы можете установить свой пакет глобально, не используя sudoили не меняя владельца node_modulesв usrпапке.


спасибо за ответ адам! просто интересно, какие могут быть возможные осложнения позже в процессе настройки сборки / среды?
吖 奇 说 - 何魏奇 Арчи Уилл

также разработать для людей на для fishтого, чтобы работать должным образом NVM потребности рыбы-обертка github.com/FabioAntunes/fish-nvm
吖奇说-何魏奇Archy Будет ли он

@ 吖 奇 说 ARCHYSHUō Я никогда не слышал о каких-либо сложностях при установке узла с помощью nvm. И так как это рекомендуется из официальных документов, мне кажется, что это лучший путь :)
Адам

9

Если вы столкнулись с этой проблемой на вашем Mac. Следуй этим шагам

Сначала проверьте, кто является владельцем этого файла, с помощью команды ниже

ls -la /usr/local/lib/node_modules

Вы найдете файл, как показано ниже, один из них ниже

drwxr-xr-x   3 root    wheel  768 May 29 02:21 node_modules

Вы заметили, что указанный выше файл принадлежит пользователю root, для внесения изменений внутри вам потребуется изменить владельца пути.

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

id -un (in my case user is yamsol)

и затем вы можете изменить, вызвав эту команду (просто замените ваше имя пользователя на ownerName)

sudo chown -R ownerName: /usr/local/lib/node_modules

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

sudo chown -R yamsol: /usr/local/lib/node_modules

Это оно.


8

Будьте осторожны со всеми ответами, которые меняют владельца всех каталогов в / usr / local По сути, не путайте систему linux !!!

Я думаю, что лучше всего использовать собственную папку для поиска всех глобальных пакетов: https://www.competa.com/blog/how-to-run-npm-without-sudo/


7

Используйте эту команду для установки npm в качестве пользователя sudo:

sudo npm install -g create-react-app 

вместо npm установите -g create-Reaction-a pp.


цитирование @ Lukas - использование sudo при установке пакетов npm. Чем глубже вы идете по такому пути, тем сложнее будет исправить его потом. Просто измените права доступа к папке npm, как указано в другом ответе, и живите лучше.
जयते जयते

6

Я смог решить эту проблему, используя следующие в Mac.

sudo npm install -g @aws-amplify/cli --unsafe-perm=true

6

Для пользователей nvm

sudo chown -R $USER /home/bereket/.nvm/versions/node/v8.9.1/lib/node_modules 

и

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

замените v8.9.1версией вашего узла, которую вы используете.


Это не работает для меня! Все еще получаю ошибку: npm ERR! Ошибка: EACCES: разрешение отклонено, переименовать /home/samuel/.nvm/versions/node/v8.10.0/lib/node_modules/.staging/npm-90fab7c7/node_modules/columnify/node_modules/wcwidth/node_modules/defaults. Похоже, что-то с / .staging .. этой папки не существует после попытки установки. Вы можете помочь мне с этим?
Самуил

@ Сэмюэл, ты выполнил эту команду? sudo chown -R $USER home/samuel/.nvm/versions/node/v8.10.0/lib/node_modules
Берекет Гебредингл

5

Похоже, вы пытались установить пакет npm глобально, а не локально, как man npm installописано ниже:

-G или --global аргумент заставит НПМ установить пакет глобально , а не локально.

Обычно, когда вы настраиваете проект npm (среди многих других, которые у вас могут быть), не стоит устанавливать пакеты в глобальные модули Node.js (/ usr / local / lib / node_modules), как ваш журнал отладки. предложил.

Вместо использования -gиспользуйте --save, что автоматически сохранит пакет как зависимость для вашегоpackage.json файла:

Как это:

$ npm install express-generator --save

$ cat package.json 
{
  "name": "first_app_generator",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
},
  "author": "ivanleoncz",
  "license": "MIT",
  "dependencies": {
    "express-generator": "^4.16.0"
  }
}

Но, как упоминалось в других ответах, если вы собираетесь использовать -g, вы должны использовать sudo( если ваш пользователь имеет привилегии sudo: см. / Etc / sudoers ) при выполненииnpm install express-generator -g , но на самом деле, это не очень хорошая идея, возможно, вызывает проблемы с разрешениями.

УВЕДОМЛЕНИЕ

Существуют инструкции по установке express-generatorс -gпараметром, чтобы скрипт был express-cli.jsдоступен по системному пути, но вы также можете использовать локально установленный скрипт, расположенный в проекте node_modulesif ваш npm:

$ ./node_modules/express-generator/bin/express-cli.js --view=pug myapp

Если сообщение типа / usr / bin / env: 'node': такой файл или каталог не отображаются, установите nodejs-legacy(Debian / Ubuntu)

ИМХО, использование -g(также использование sudo) похоже на hic sunt dracones , если вы не уверены в последствиях.

Для дополнительной информации:


4

Это произошло из-за npmневозможности node_modulesлокального доступа к вашему глобальному каталогу.

sudo chown -R Name: /usr/local/lib/node_modules

например

sudo chown -R developerayo: /usr/local/lib/node_modules

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


3

Просто вы можете сменить владельца или просто использовать sudo перед тем, как выполнить команду

sudo chown -R [owner]:[owner] /usr/local/lib/node_modules( сменить владельца )

или

sudo npm install -g json-server

Это оно.


3

Для Linux / Ubuntu, если команда

npm install -g <package_name>

npm WARN deprecated superagent@4.1.0: Please note that v5.0.1+ of superagent removes User-Agent header by default, therefore you may need to add it yourself (e.g. GitHub blocks requests without a User-Agent header).  This notice will go away with v5.0.2+ once it is released.

npm ERR! path ../lib/node_modules/<package_name>/bin/..

npm ERR! code EACCES

npm ERR! errno -13

npm ERR! syscall symlink

npm ERR! Error: EACCES: permission denied, symlink '../lib/node_modules
/<package_name>/bin/..' -> '/usr/local/bin/<package_name>'

npm ERR!  { [Error: EACCES: permission denied, symlink '../lib/node_modules/<package_name>/bin/..' -> '/usr/local/bin/<package_name>']

npm ERR!   cause:
npm ERR!    { Error: EACCES: permission denied, symlink '../lib/node_modules/<package_name>/bin/..' -> '/usr/local/bin/<package_name>'

npm ERR!      errno: -13,

npm ERR!      code: 'EACCES',

npm ERR!      syscall: 'symlink',

npm ERR!      path: '../lib/node_modules/<package_name>/bin/..',
npm ERR!      dest: '/usr/local/bin/ionic' },

npm ERR!   stack:
npm ERR!    'Error: EACCES: permission denied, symlink \'../lib/node_modules/ionic/bin/ionic\' -> \'/usr/local/bin/ionic\'',

npm ERR!   errno: -13,

npm ERR!   code: 'EACCES',

npm ERR!   syscall: 'symlink',

npm ERR!   path: '../lib/node_modules/<package-name>/bin/<package-name>',

npm ERR!   dest: '/usr/local/bin/<package-name>' }

npm ERR! 

npm ERR! The operation was rejected by your operating system.

npm ERR! It is likely you do not have the permissions to access this file as the current user

npm ERR! 

npm ERR! If you believe this might be a permissions issue, please double-check the

npm ERR! permissions of the file and its containing directories, or try running

npm ERR! the command again as root/Administrator (though this is not recommended).


npm ERR! A complete log of this run can be found in:

npm ERR!     /home/User/.npm/_logs/2019-07-29T01_20_10_566Z-debug.log

Исправлено: установка с правами root

sudo npm install <package_name> -g


3

Вам нужно разрешение уровней суперпользователя, чтобы установить React. В Linux / Unix учетная запись суперпользователя обычно называется «root».

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

sudo -i

а затем просто запустите команду для установки React:

npm install -g create-react-app

Однако командаactjs рекомендует нам использовать следующую команду вместо установки глобального пакета.

npx create-react-app app_name

1
Использование sudo - рискованное предложение, некоторые пакеты могут быть безопасными, но другие могут отправиться на что-то другое и воспользоваться привилегиями root, которые вы предоставляете. sudo запускает последующие команды как суперпользователь
rustyDev

Некоторым пакетам, например, create-react-appнужны права root для установки в качестве глобальных пакетов; в противном случае вы не сможете установить его. Однако командаactjs рекомендует нам использовать следующую команду npx create-react-app app_nameвместо установки глобального пакета.
Фатема Т. Зухора



2

После долгих исследований я понял, что для установки Mac OS ничего не требуется, просто установите sudo npm install -g @angular/cliваш терминал, введите пароль и введите его. Это сработало для меня.



2

Если вы работаете в Linux (то есть: Arch)

# npm -g install packageName

По умолчанию эта команда устанавливает пакет в / usr / lib / node_modules / npm и для этого требуется права суперпользователя.

Разрешить общедоступные установки

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

~/.profile
PATH="$HOME/.node_modules/bin:$PATH"
export npm_config_prefix=~/.node_modules

Заново войдите в систему или используйте источник, чтобы обновить изменения.

Вы также можете указать --prefixпараметр для npm install. Однако это не рекомендуется, так как вам нужно будет добавлять его каждый раз при установке глобального пакета.

$ npm -g install packageName --prefix ~/.node_modules

Таким образом, вам не нужно жевать разрешение папки



1

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

  1. Установите nvmс помощью curl(для последней версии перейдите на nvm.sh )
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
  1. Список доступных версий узлов
nvm ls

v10.12.0 по
умолчанию -> узел v10.12 (-> v10.12.0)
-> стабильный (-> v10.12.0) (по умолчанию)
стабильный -> 10.12 (-> v10.12.0)

  1. Выберите, какую версию узла использовать
nvm use v10.12

nvm несовместим с параметром префикса конфигурации npm: в настоящее время установлено значение ""

  1. Запустите это, чтобы сбросить опцию:
nvm use --delete-prefix v10.12.0

Выполнив приведенные выше команды, вы сможете установить реакцию / угол в Ubuntu.



0

Я использовал sudo, но это не решило проблему, я исправил проблему, изменив разрешение папки node_modules,

sudo chmod -R 777 node_modules

Если вы хотите, вы можете заменить 777 любым другим кодом, если вы не устанавливаете разрешение для всех пользователей / групп.


0

Для тех из вас, все еще не может решить проблему после использования вышеупомянутых решений. Попробуй это

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

Это должно сработать, ура!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.