NPM не може встановити залежності - Спроба розблокувати щось, що не було заблоковано


192

Я намагався запустити npm install у своєму файлі package.json, але у мене виникають багато проблем. Він постійно говорить "Помилка: спроба розблокувати XXX, який не був заблокований" про всі мої залежності. Ось один із них:

Error: Attempt to unlock tbd@~0.6.4, which hasn't been locked
        at unlock (/usr/local/lib/node_modules/npm/lib/cache.js:1304:11)
        at cb (/usr/local/lib/node_modules/npm/lib/cache.js:646:5)
        at /usr/local/lib/node_modules/npm/lib/cache.js:655:20
        at /usr/local/lib/node_modules/npm/lib/cache.js:1290:7
        at /usr/local/lib/node_modules/npm/node_modules/lockfile/lockfile.js:167:38
        at OpenReq.Req.done (/usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:144:5)
        at OpenReq.done (/usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:64:22)
        at Object.oncomplete (fs.js:107:15)

Якщо я спробую запустити його як sudo, то, здається, вийдемо далі і почати встановлювати деякі пакети, але замість цього з’являються нові помилки:

> chokidar@0.8.1 postinstall /Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/chokidar
> node setup-deps.js

shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied

node.js:811
    var cwd = process.cwd();
                      ^
Error: EACCES, permission denied
    at Function.startup.resolveArgv0 (node.js:811:23)
    at startup (node.js:58:13)
    at node.js:902:3
npm ERR! error rolling back Error: ENOTEMPTY, rmdir '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q'
npm ERR! error rolling back  karma@0.10.9 { [Error: ENOTEMPTY, rmdir '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q']
npm ERR! error rolling back   errno: 53,
npm ERR! error rolling back   code: 'ENOTEMPTY',
npm ERR! error rolling back   path: '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q' }
npm ERR! Error: ENOENT, chown '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/socket.io/lib/socket.io.js'

Нещодавно я оновив свої вузли та npm установки. То, можливо, це має щось спільне. Крім того, більша частина моєї розробки була в офісі, і сьогодні я працюю над VPN, тому, можливо, це теж має щось спільне з цим.

Будь-які ідеї?


Ось файл package.json, якщо це допомагає ... (зітхання), nvm, я не можу, здається, вставити його в .. занадто багато символів.
TJ Kirchner

на що ти працюєш
Wayne

Відповіді:


421

Відповідно до photusenigma за адресою: https://github.com/npm/npm/isissue/4815

Запустіть ці команди у вікні терміналу (зверніть увагу - НЕ замінюйте частину $ USER ... ось команда Linux для отримання вашого користувача!):

sudo chown -R $USER ~/.npm
sudo chown -R $USER /usr/local/lib/node_modules

... і ... якщо ви працюєте на mac (як я), і все ще бачите помилки після запуску цих команд, тоді запустіть цю останню, і ви повинні бути хорошими. (Рекомендую спробувати тестування, перш ніж робити це. Мені не подобається змінювати дозволи в каталозі ENTIRE / usr / local, якщо це дійсно не здається необхідним!)

sudo chown -R $USER /usr/local

7
Працювали для мене спасибі! Моя папка node_modules опинилася в іншому місці, хоча, можливо, це допоможе комусь іншомуsudo chown -R `whoami` /usr/lib/node_modules/
Justen

4
Як не дивно, рекурсивна робота chownне змінила ~/.npm/_locksдля мене дозволи . Я працював, працюючи, бігаючиsudo chown -R myname ~/.npm/_locks
Sitati

7
Будьте в курсі, що це рішення не дуже приємно для багатокористувацьких платформ. Перша команда в порядку, друга - стандартний власник системних файлів. / usr / local / lib / node_modules використовується лише npm з опцією --global, що означає також використання sudo. На жаль, деякі сценарії встановлення за допомогою npm змішують як глобальні, так і не глобальні команди npm ... Створення цього безладу.
Фафаман

5
Погоджено, все, що вам потрібно, це перша команда. Уникайте інших, оскільки ваш користувач не повинен належати.
піроспада

2
чи є спосіб змінити "ефекти" другого рядка sudo chown -R $USER /usr/local/lib/node_modules? Я запустив це перед тим, як прочитати, що це не дуже гарна ідея ..
shaneparsons

153

Я працював із колегою сьогодні вдень і з'ясував, у чому проблема. Мою папку ".npm" у моєму домашньому каталозі належав користувач root, а не я. Я не впевнений, що сталося з цим. Можливо, я встановив вузол або npm в якості кореневого адміністратора в один момент. У будь-якому випадку я просто біг, sudo chown -R [username] .npmі я нарешті знову міг запускати npm installкоманди зі своїх проектів!


11
Це також допомагає, якщо ви виконаєте одну і ту ж команду ~/tmp/, або будь-яке місце, яке Node використовує як тимчасове розташування
Jason

1
Спасибі за вашу відповідь! Врятував мені головний біль, оскільки повідомлення про помилку погано. Але я скажу, що npm повинен робити це за замовчуванням, тому що я впевнений, що сам не встановив його під root. І для повноти вам доведеться подавити -R <ім'я користувача> .npm
crowmagnumb

Радий, що можу допомогти :) І, добрий улов! Я зміню свою відповідь, щоб сказати це.
TJ Kirchner

Рятувальник життя! Дякую
Метью Куллум

21

У моєму випадку проблема викликала npm з користувачем, який не має каталогу HOME, тому, наприклад, не вдалося виконати наступну команду:

sudo -u someUser npm install

Рішенням є надання каталогу HOME, куди someUserмає доступ для запису:

sudo -u someUser HOME=/some/directory npm install

Прихильне, тому що це насправді працювало для мене, тому кудо і спасибі. Я розгортаюсь у виробництві, і користувач навіть не мав каталогу .npm (який я все одно міг знайти)
Stuart Watt

Працює в ChromeOS з користувачем "chronos".
Кайл Коберлі

Мені вдалося обійти це завдання sudo -u someUser -i, вказавши , з чого починається нова оболонка входу. Я ще раз переглянув це, і код кешування в npm використовує змінну npm.cache, для якої я здогадуюсь за замовчуванням $HOME/.npm/. sudo також може мати різну поведінку, залежно від того, для чого змінна HOME встановлюється залежно від конфігурації та наявності чи відсутності параметрів командного рядка.
jgibson

11

Якщо ця проблема була виправлена, виправили її, змінивши переслідування відповідно до прийнятої відповіді:

sudo chown -R $USER ~/.npm

Однак слід уникати другої команди, оскільки вона знижує дозволи системного ресурсу ( sudo chown -R $USER /usr/local/lib/node_modules). Не гарна ідея.

Для запису: "usr" в /usr/localстендах для Unix System Resources .


1
Ймовірно, це повинен бути коментар до прийнятої відповіді, а не розміщений як нова відповідь.
Kmeixner

Автор цієї відповіді це знає, але не оновив свою відповідь, тому я вважаю, що окрема відповідь сильно гарантована.
Gui Prá

4

Нічого цього не працювало для мене. Мені довелося запустити буквально як root, зробивши наступне:

sudo su -
sudo npm install forever -g

Потім пакет встановлений на Linux Ubuntu 14.04.


Вам дійсно не слід запускати npm як root!
Антуан 'хашар' Муссо


1

Моє рішення:

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

в моєму випадку було:

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

Але я отримав ту ж проблему, нарешті, після

npm cache clean

це спрацювало !


0

У мене була та сама проблема, і я годинами намагався виправити дозвіл / право власності на файли та каталоги, пов’язані з npm, але в цьому мені не пощастило.

Раптом я виявив, що я мав ~/.npmrcфайл із cacheзаписом, що вказує на неіснуючий каталог. Видалено це cacheвластивість для використання місця кешу за замовчуванням, і тепер це вирішено.


0

Відмова від відповідальності

Я користувач Windows . Однак ми з моєю командою зіткнулися з низкою питань щодо помилок установки npm.

Проблеми

Далі наведено список засвоєних уроків та можливе радикальне рішення, яке завжди нас рятувало:

  1. node_modules , локальний каталог установки npm стає захищеним від модифікації через недолік ОС, наприклад, неможливість обробляти шляхи довше ніж 255 символів.
  2. Якщо папку стерти за допомогою інструменту командного рядка, вона все ще може здаватися так, ніби папка існує в провіднику, що при спробі доступу до неї видає ряд помилок дозволу.
  3. Залежно від вашого антивірусного та / або локального менеджера політик, ви, можливо, зможете створити папку node_modules і пізніше випустити доступ або дозволи до неї, що призведе до низки помилок встановлення.
  4. Увімкніть журнали npm, щоб отримати детальну інформацію про можливі проблеми з:

    npm install --loglevel verbose

Радикальний

Встановити rimraf у всьому світі

 npm install rimraf -g

Запустіть rimraf на node_modules :

rimraf yourDir/node_modules

Потім спробуйте запустити:

npm install

Увага!

Або бракує там. Будьте надзвичайно уважні до того, що слід за командою rimraf. Ніяких попереджень, жодних підказок, нічого немає. Він просто стирає каталог з чистої фази землі, як ніби її там ніколи не було. Спробуйте це на свій страх і ризик.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.