Ошибка: EACCES: в разрешении отказано

106

Я запускаю npm install lodash, но выдает ошибку: EACCES: разрешение отказано . Я знаю, что это проблема с разрешением, но, насколько мне известно, разрешение sudo не требуется для локальной установки модуля узла. Если я запустил его с помощью sudo, он будет установлен внутри папки ~ / node_modules. drwxrwxr-x - это права доступа к файлу существующей папки. Я не могу понять, что могло пойти не так.

Ниже сообщение об ошибке.

npm ERR! tar.unpack untar error /home/rupesh/.npm/lodash/4.13.1/package.tgz
npm ERR! Linux 3.13.0-88-generic
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "lodash"
npm ERR! node v4.3.1
npm ERR! npm  v2.14.12
npm ERR! path /home/rupesh/node_modules/lodash
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall mkdir

npm ERR! Error: EACCES: permission denied, mkdir '/home/rupesh/node_modules/lodash'
npm ERR!     at Error (native)
npm ERR!  { [Error: EACCES: permission denied, mkdir '/home/rupesh/node_modules/lodash']
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack: 
npm ERR!    [ '/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:35:25',
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:47:53',
npm ERR!      'FSReqWrap.oncomplete (fs.js:82:15)' ] }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/rupesh/Desktop/es6/npm-debug.log
xruptronics
источник
это владелец папки node_modulesroot?
AJS
Папка node_module еще не создана внутри папки, в которую я собираюсь установить lodash.
xruptronics
вы запускали npm install в своем каталоге / home / rupesh / или другом каталоге?
AJS
путь к папке, в которой я запускаю npm install, - ~ / Desktop / es6
xruptronics
каков результат, ls -l ~/Desktop | grep es6убедитесь, что вы являетесь владельцем каталога es6
AJS

Ответы:

86

Эта команда устраняет проблему. У меня сработало:

sudo npm install -g --unsafe-perm=true --allow-root
Сания Сюд Куреши
источник
Для кого-то вроде меня, хотя эта команда, кажется, работала на момент написания, для Node v10.10.0я получил следующую ошибку: «npm ERR! Не могу установить / var / www / project: отсутствует имя пакета»
Уэйн Смоллман,
1
Флаги --unsafe-perm = true --allow-root работали для нас с использованием узла v10.15.0 для установки от имени пользователя root существующего приложения, в которое node-sass не устанавливался. Точная команда, которую мы использовали для установки node-sass в папку node_modules локального каталога, была # npm install --save-dev --unsafe-perm = true --allow-root node-sass @ latest
Питер Эдвардс
Вы можете использовать root для решения проблемы (хотя это не рекомендуется).
Крис Маротта
Я смог заставить его работать, используя эти флаги, поэтому на самом деле ответ таков: sudo npm install -g --unsafe-perm = true --allow-root <package-name> @ <version-name>
Frank Hu MSFT
48

У меня такая же проблема с установкой сервера webpack по всему миру. Используйте шаги из этого URL- адреса. Моя проблема решена, я буду работать на вас.

Шаги, упомянутые выше. Здесь: сделайте резервную копию вашего компьютера перед запуском.

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

1. mkdir ~/.npm-global

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

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

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

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

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

4.source ~/.profile

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

npm install -g jshint

Вместо шагов 2-4 вы можете использовать соответствующую переменную ENV (например, если вы не хотите изменять ~ / .profile):

NPM_CONFIG_PREFIX=~/.npm-global
Вишал Патель
источник
1
работал над Мохаве. Большое спасибо после 4-5 часов устранения неполадок, это помогло!
Джонни
13

У меня была проблема с Linux. я написал

chown -R myUserName ./* 

в папке моего проекта.

Сергей
источник
8
Очень не рекомендуется. Это затрагивает все ваши каталоги и удаляет права root на любой из них. Если некоторые вещи нужно установить как root, это разрушит вашу текущую конфигурацию.
Патрик Да Силва
Я согласен с @PatrickDaSilva. Это испортило весь мой сервер ..
Саймон Дегн,
12

Создание package.json с помощью npm init решило мою проблему.

xruptronics
источник
Но я не уверен, почему при установке модуля узла требуется файл package.json, поскольку файл package.json не обновляется и не используется в моем случае, потому что я не использовал --save или --save-dev или аналогичную команду.
xruptronics
это странно. Я думаю, что что-то было испорчено в вашей конфигурации npm, и выполнение init reset это должно быть навсегда загадкой, так как я не мог найти ни одной ссылки на аналогичную проблему в другом месте.
AJS
Была аналогичная проблема с npm 6.9.0, и это тоже сработало для меня.
Крис Маротта
8

Из того, что я вижу в ваших журналах, вы опубликовали:

npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_class: 'DirWriter',

каталог /home/rupesh/node_modules/не имеет необходимых разрешений для создания каталога, поэтому запустите chown -r rupesh:rupesh /home/rupesh/node_modules/это должно решить эту проблему.

AJS
источник
Выполнение команды chown -R rupesh: rupesh / home / rupesh / node_modules / и запуск npm install lodash снова установили lodash внутри папки ~ / node_module. Но на этот раз он не выдает ошибки. Но это не то место, где я собираюсь устанавливать.
xruptronics
да, я знаю, что вам следует создать проект в своем домашнем каталоге, а не на рабочем столе. npm по какой-то причине по какой-то причине устанавливает ваши модули /home/rupesh/node_modules. В любом случае работа в домашнем каталоге должна быть идеальной
AJS
Я думаю, что ~ / Projects / es6 эквивалентен структуре ~ / Desktop / es6. У меня возникли проблемы с выяснением того, почему node_modules не создается внутри папки es6 и почему модуль lodash (или любой другой) не установлен внутри этого. Раньше я не сталкивался с этой проблемой, но что сегодня пошло не так, это то, что я хочу выяснить.
xruptronics
да, я прочитал свои предыдущие два комментария и понял глупость :), ну, я огляделся и не нашел никого, у кого была бы такая же проблема. Может ли ваш код найти loadashмодуль?
AJS
7

У него нет прав на запись для others(rx). Попробуйте с

chmod a+w <folder>

и повторить.

Хуанхо Сальвадор
источник
2
У chownвас нет -rвозможности предотвратить использование его для каждой папки в node_modules?
DrakaSAN
@Juanjo Salvador Это не сработало. Выдает ту же ошибку.
xruptronics
@DrakaSAN да, у chown есть рекурсивная опция.
Juanjo Salvador
7

Это сразу решило мою проблему - mac Mojave 10.14.6 - PhpStorm.

Необработанная ошибка отклонения: EACCES: в разрешении отказано, mkdir '/Users/myname/.npm/_cacache/index-v5/fb/5a'

sudo chown -R $USER:$GROUP ~/.npm
sudo chown -R $USER:$GROUP ~/.config

Исходное сообщение: https://stackoverflow.com/a/50639828

малость
источник
6

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

sudo chmod -R 777 /yourProjectDirectoryName

бежать с

sudo npm install lodash
Радж Гохель
источник
Это
младшее
Возможно, вам даже не понадобится 777. Для меня проблема была в том, что # были слишком низкими. (775 исправил.)
Эндрю,
«Установка разрешений 777 для файла или каталога означает, что он будет доступен для чтения, записи и выполнения для всех пользователей и может представлять огромную угрозу безопасности». - linuxize.com/post/what-does-chmod-777-mean
MillerC
4

FWIW У меня были те же симптомы, но с другим пакетом. Создание package.jsonи запуск npm initсделал НЕ решить мою проблему.

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

Решением было запустить npm install appв другом месте без корневой umask.

Кортни Шварц
источник
4

Связанная проблема:

Потратил 3 часа на несколько дней.

На машине AWS EC2 работало следующее:

sudo chown -R $(whoami) /home/ubuntu/.cache
sudo chown -R $(whoami) /home/ubuntu/.config
sudo chown -R $(whoami) /home/ubuntu/.local
sudo chown -R $(whoami) /home/ubuntu/.npm
sudo chown -R $(whoami) /home/ubuntu/.pm2

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

Манохар Редди Поредди
источник
3

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

/home/<user-name>

Я зашел в этот каталог, введя эту команду

cd /home/<user-name>

а затем изменил разрешение папки .npm, введя эту команду.

sudo chmod -R 777 ".npm"

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

Анируддх Агарвал
источник
Почему вы позволили всему миру получить доступ к этой конкретной папке?
egdavid
2

Сначала установите без -g (global) на root. После попытки использовать -g (global) у меня это сработало.

Ренджит
источник
Работал!! На Mac моя папка с кодом переместилась в корневую папку: HardDrive /, и "npm install" работала безупречно. Затем я переместил свою папку с кодом обратно туда, где я хотел, внутри HardDrive / users / myUserName / Projects / code, снова запустил npm install, и на этот раз это сработало.
Джош
2

LUBUNTU 19.10 / Выполняется та же проблема: $ npm start

дамп: Ошибка: EACCES: в разрешении отказано, откройте '/home/simon/xxx/pagebuilder/resources/scripts/registration/node_modules/.cache/@babel/register/.babel.7.4.0.development.json' в Object. fs.openSync (fs.js: 646: 18) в Object.fs.writeFileSync (fs.js: 1299: 33) при сохранении (/ home / simon / xxx / pagebuilder / resources / scripts / registration / node_modules / @ babel / register / lib / cache.js: 52: 15) в _combinedTickCallback (internal / process / next_tick.js: 132: 7) в process._tickCallback (internal / process / next_tick.js: 181: 9) в Function.Module.runMain (module.js: 696: 11) в Object. (/home/simon/xxxx/pagebuilder/resources/scripts/registration/node_modules/@babel/node/lib/_babel-node.js:234:23) в Module._compile (module.js: 653: 30) в Object .Module._extensions..js (module.js: 664: 10) в Module.load (module.js: 566: 32)

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

Это исправило это для меня!

$ sudo chmod a+w node_modules -R ## from project root

Саймон П.
источник
2

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

mkdir ~/.npm-global

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

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

В предпочитаемом текстовом редакторе откройте или создайте файл ~ / .profile и добавьте эту строку:

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

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

source ~/.profile

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

АюшКатияр
источник
1

Вот решение для GNU / Linux (Debian) пользователей (Заменить USERNAME с Вашим именем пользователя ):

sudo chown -R $USER:$(id -gn $USER) /home/USERNAME/.config

J-Snor
источник
0

Удалите папку dist, и это решит мою проблему !!

Хекмат
источник
0

В Windows оказалось, что порт уже использовался IIS.

Остановка IIS (щелкните правой кнопкой мыши, выйти), решила проблему.

Атрон Сейдж
источник
0

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

sudo chown -R $USER:$GROUP /usr/local/lib/node_modules
дидил
источник
0

Я попробовал большинство из этих предложений, но ни одно из них не помогло. Затем я побежал, npm clean-installи это решило мои проблемы.

MoKG
источник
0

node рекомендует выполнить следующее:

 sudo chown -R $USER:$(id -gn $USER) /home/venkatesh/.config

Если вы выполните

npm config

Вы увидите что-то вроде этого

│                   npm update check failed                   │
│             Try running with sudo or get access             │
│            to the local update config store via             │
│ sudo chown -R $USER:$(id -gn $USER) /home/venkatesh/.config │

У меня это сработало.

Манасвини Ганеш
источник
0

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

sudo chmod 777 path-to-directory

путь к каталогу в этом проекте был (/ home / ubuntu / blog / server)

Мухаммад Фазил
источник
0

Если вы получаете сообщение об ошибке, как показано ниже

Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/<PackageName>/vendor'

Я предлагаю использовать следующую команду для установки вашего глобального пакета

sudo npm install -g <PackageName> --unsafe-perm=true --allow-root
Нишарг Шах
источник
-3

Выполните эти команды, и проблема будет решена!

sudo chmod -R 777 /usr/local/bin
sudo chmod -R 777 /usr/local/lib/node_modules
Нитин Джа
источник
Для /usr/localвсех подкаталогов права должны rwxr-xr-xпринадлежать пользователю root. Пользователи системы могут читать и выполнять в этой структуре каталога, но не могут редактировать и создавать файлы. При этом ваш ответ предлагает дать разрешения всем. Причем без описания того, как и что будет затронуто, или почему проблема будет решена.
Кулирадж