Помилка: EACCES: дозвіл відмовлено


99

Я запускаю 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_modulesкореня папки ?
AJS

Папка node_module ще не створена всередині папки, в яку я маю намір встановити lodash.
xruptronics

Ви запускали встановлення npm у своєму каталозі / home / rupesh / або в іншому каталозі?
AJS

шлях до папки, в якій я запускаю установку npm, ~ / Desktop / es6
xruptronics

який результат ls -l ~/Desktop | grep es6переконайтесь, що ви є власником каталогу es6
AJS

Відповіді:


79

Ця команда вирішує проблему. Мені це вдалося:

sudo npm install -g --unsafe-perm=true --allow-root

Для таких, як я, хоча ця команда, здається, працювала на момент написання статті, для Node v10.10.0я отримав таку помилку: "npm ERR! Не вдається встановити / var / www / project: Відсутнє ім'я пакета"
Wayne Smallman

1
Прапори --unsafe-perm = true --allow-root працювали для нас, використовуючи node 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

46

У мене така ж проблема із встановленням сервера 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 годин усунення несправностей, це зробило трюк!
Джонні

11

Створення package.json за допомогою npm init вирішило мою проблему.


Але я не впевнений, чому при встановленні модуля вузла потрібен файл package.json, оскільки файл package.json у моєму випадку не оновлюється і не використовується, оскільки я не використовував команду --save або --save-dev чи подібну.
xruptronics

це дивно. Я думаю, що щось було зіпсовано у вашому npm conf, і це робить init, щоб скинути його, у будь-якому випадку це повинно бути назавжди загадкою, оскільки я не міг знайти жодного посилання на подібну проблему в іншому місці.
AJS

У мене була подібна проблема з npm 6.9.0, і це спрацювало і на мене.
Кріс Маротта,

11

У мене була проблема з Linux. я написав

chown -R myUserName ./* 

в папці мого проекту.


7
Дуже не рекомендується. Це торкається всіх ваших каталогів і видаляє права користувача на будь-який з них. Якщо деякі речі потрібно встановити як root, це знищує вашу поточну конфігурацію.
Патрік Да Сільва,

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 так, у чауна є рекурсивний варіант.
Хуанхо Сальвадор

6

Це негайно вирішило мою проблему - 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


4

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

У цій системі, очевидно, нові папки в цьому місці створювались із правами root. Під час створення npm installнових папок. Це спричинило помилку встановлення npm навіть із sudo.

Рішенням було запустити npm install appв іншому місці без кореневої umask.


4

Спробуйте надати всі дозволи папці проекту за допомогою команди нижче

sudo chmod -R 777 /yourProjectDirectoryName

бігати с

sudo npm install lodash

Це рішення
молодшого віку

Можливо, вам навіть не знадобиться 777. Для мене проблема полягала лише в тому, що # були занадто низькими. (775 це виправило.)
Ендрю

"Встановлення 777 дозволів для файлу або каталогу означає, що він буде доступним для читання, записування та виконання всіма користувачами і може становити величезний ризик для безпеки". - linuxize.com/post/what-does-chmod-777-mean
MillerC

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 (глобальний) на root. Після спробу використання -g (глобальний) це спрацювало для мене.


Працювали !! На 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

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

 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 

У мене це спрацювало.


-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.