Помилка: EACCES: в дозволі відхилено, доступ '/ usr / local / lib / node_modules'


298

Що може спричинити помилку 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
Дивіться офіційний посібник НПМ про те, як це вирішити: docs.npmjs.com/…
Джунейт

Відповіді:


488

змінити свої файлові дозволи .. так

спочатку перевірте, кому належить каталог

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
Були випадки, коли додавання судо в команду також не працювало. Це працювало на мене, і слід прийняти відповідь.
Niroj Shr

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і вона спрацювала.
Midori

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

Крім того, якщо ви не хочете цього робити npm config set prefix(особливо якщо ви пишете інсталятор без кореня), ви можете змінити 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
Це досить прямо. Це також означає, що вам більше ніколи не потрібно турбуватися ні про що в лібі; ви володієте / usr / local / lib.
Obinna Nnenanya

4
Це зовсім не вдале рішення. Бігаючи вище, chownви ризикуєте зруйнувати структуру дозволів всієї вашої файлової системи.
Ларс

3
Ця команда зруйнувала всі мої дозволи. Потрібно знову відновити всі речі.
Азам Альві

4
Якщо бути точним, це не додавання власника. Це зміна в власник, який є набагато більш руйнівним , ніж просто додавання , і майже настільки ж руйнівним , як sudo chmod -R 777 /.
SOFe

29

спробуйте додати судо перед будь-якою командою, яку ви намагаєтеся.

ось так: встановити sudo npm

Використання 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/isissue/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
Чи безпечно запускати на виробничому сервері?
Сир

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

Я намагався встановити react expo, і крім sudo мені довелося додати - unfefe-perm

подобається це. Це вирішує мою проблему

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

@Furquan, дуже дякую ... Це спрацювало для мене після спроб різних рішень.
AzeTech

@AzeTech, я радий, що це допомогло: D
Furquan

9

Якщо ви зіткнулися з цією проблемою на Mac. Виконайте ці кроки

Спочатку перевірте, хто є власником цього файлу, використовуючи команду нижче

ls -la /usr/local/lib/node_modules

ви знайдете якийсь файл на зразок нижче одного з них нижче

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

чи помітили ви, що вищезазначений файл є власним коренем, щоб внести зміни всередину, вам потрібно змінити власник корабля шляху.

Ви можете скористатися цією командою перевірити, хто є поточним користувачем

id -un (in my case user is yamsol)

а потім ви можете змінити, зателефонувавши до цієї команди (просто замініть своє ім’я користувача на ownerName)

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

в моєму випадку, як ви знаєте, користувач "yamsol", я буду називати цю команду таким чином

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

Це воно.


8

Будьте уважні до всіх відповідей, які змінюють власника всіх каталогів під / usr / local. В основному, не псуйте систему Linux !!!

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


8

Ви можете встановити npm через диспетчер версій Node або інсталятор Node. У документах зазначено:

Ми не рекомендуємо використовувати інсталятор Node, оскільки процес встановлення Node встановлює npm в каталозі з локальними дозволами і може викликати помилки дозволів при запуску npm-пакетів у всьому світі.

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

На щастя, це дуже просто. Вам навіть не потрібно видаляти поточну версію npm або Node.js.

Все, що вам потрібно зробити - це

  1. Встановити nvm. Для ОСX або 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 Will

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

7

Використовуйте цю команду для встановлення npm як користувача sudo:

sudo npm install -g create-react-app 

замість npm встановити -g create-react-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 ..тої папки не існує після спроби встановлення. Чи можете ви мені в цьому допомогти?
Самуїл

@Samuel зробив цю команду? sudo chown -R $USER home/samuel/.nvm/versions/node/v8.10.0/lib/node_modules
bereket gebredingle

5

Схоже, ви намагалися встановити пакет npm глобально, а не локально, як man npm installописано:

Аргумент -g або --global призведе до встановлення пакету npm глобально, а не локально.

Як правило, коли ви налаштовуєте 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_modulesвашому проекті npm:

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

Якщо повідомлення на зразок / usr / bin / env: 'node': Не відображається такий файл чи каталог , встановіть nodejs-legacy(Debian / Ubuntu)

ІМХО, використання -g(також використання sudo), схоже на дракони HIC SANT , які не , якщо ви не впевнені в наслідках.

Для подальшої інформації:


4

Це сталося внаслідок npmнеможливості node_modulesлокального доступу до вашої глобальної директорії, запущеної

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

напр

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

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


3

Просто ви можете змінити власника або просто скористатися судо, перш ніж виконувати цю команду

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

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

sudo npm install <package_name> -g


3

Щоб встановити React, вам потрібен дозвіл суперпользовательских рівнів. У Linux / Unix обліковий запис суперпользователя, як правило, називається «root».

Щоб отримати привілей суперпользователя, просто запустіть таку команду на своєму терміналі:

sudo -i

а потім просто запустіть команду, щоб встановити React:

npm install -g create-react-app

Однак команда reactjs рекомендує нам використовувати наступну команду замість встановлення глобального пакету.

npx create-react-app app_name

1
Використання sudo - ризикована пропозиція, деякі пакети можуть бути безпечними, але інші можуть почати робити щось інше та скористатися корисними привілеями, які ви надаєте. sudo виконує наступні команди як
суперрусер

Деякі пакети, як-от, create-react-appпотребують привілеїв root, щоб встановлюватись як глобальні пакети; в іншому випадку ви не зможете його встановити. Однак команда reactjs рекомендує нам використовувати наступну команду npx create-react-app app_nameзамість встановлення глобального пакету.
Fatema T. Zuhora



2

Після тривалих досліджень я зрозумів, що для встановлення кутового кліпа mac OS нічого не потрібно, просто скористайтеся sudo npm install -g @angular/cliтерміналом, він підкаже пароль, введіть ваш пароль, і далі приступить до встановлення cli. Це працювало для мене.



2

Якщо ви працюєте з Linux (тобто: Arch)

# npm -g install packageName

За замовчуванням ця команда встановлює пакет під / usr / lib / node_modules / npm і вимагає кореневих привілеїв для цього.

Дозволити встановлення для користувачів

Щоб дозволити встановлення глобальних пакетів для поточного користувача, встановіть npm_config_prefixзмінну середовища. Для цього використовують як npm, так і пряжу.

~/.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 не сумісний із параметром "prefix" npm config: на даний момент встановлено значення ""

  1. Запустіть це, щоб скасувати параметр:
nvm use --delete-prefix v10.12.0

Виконуючи команди вище, ви зможете встановити reabu / angular в 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.