Ошибка: 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

это владелец папки 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 решило мою проблему.


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


Выполнение команды 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



0

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

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


0

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

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

0

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


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. Пользователи системы могут читать и выполнять в этой структуре каталога, но не могут редактировать и создавать файлы. При этом ваш ответ предлагает дать разрешения всем. Причем без описания того, как и что будет затронуто, или почему проблема будет решена.
Кулирадж
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.