NPM이 종속성을 설치할 수 없음-잠기지 않은 것을 잠금 해제하려고했습니다.


192

package.json 파일에서 npm 설치를 실행하려고했지만 많은 문제가 있습니다. 모든 종속성에 대해 "오류 : 잠기지 않은 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/issues/4815

터미널 창에서 다음 명령을 실행하십시오 (참고-$ USER 부분을 바꾸지 마십시오 ... 사용자를 얻는 Linux 명령입니다!) :

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

... 그리고 ... 맥과 같은 컴퓨터를 사용하고 있는데 명령을 실행 한 후에도 오류가 계속 표시되면 마지막 명령을 실행하면됩니다. (이 작업을 수행하기 전에 테스트해볼 것을 권장합니다. 실제로 필요한 것 같지 않으면 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
이 솔루션은 다중 사용자 플랫폼에는 적합하지 않습니다. 첫 번째 명령은 ok이고 두 번째 명령은 시스템 파일의 표준 사용자 소유자입니다. / usr / local / lib / node_modules는 --global 옵션과 함께 npm에서만 사용하므로 sudo도 사용합니다. 불행히도, npm을 사용하는 일부 설치 스크립트는 전역 및 비 전역 npm 명령을 혼합합니다.
Fafaman December

5
동의, 필요한 것은 첫 번째 명령입니다. 사용자가 실제로 소유해서는 안되는 다른 것들을 피하십시오.
파이로 스페이드

2
두 번째 줄의 "효과"를 바꾸는 방법이 sudo chown -R $USER /usr/local/lib/node_modules있습니까? 나는 그것이 좋은 생각이 아니라는 것을 읽기 전에 그것을 실행 ..
shaneparsons

153

오늘 오후에 동료와 함께 일하면서 문제가 무엇인지 알아 냈습니다. 내 홈 디렉토리의 ".npm"폴더는 본인 대신 루트 사용자가 소유했습니다. 그 원인이 무엇인지 잘 모르겠습니다. 어쩌면 node 또는 npm을 루트 관리자로 설치했을 수도 있습니다. 어쨌든 방금 실행 sudo chown -R [username] .npm했고 마침내 npm install내 프로젝트에서 명령을 다시 실행할 수있었습니다 !


11
또한 동일한 명령을 실행 ~/tmp/하거나 노드가 임시 위치로 사용하는 모든 위치 에 도움이됩니다.
Jason

1
답변 주셔서 감사합니다! 오류 메시지가 잘못되어 두통을 덜었습니다. 그러나 npm은 기본적으로 루트에 설치하지 않았기 때문에 기본적 으로이 작업을 수행해야한다고 말할 것입니다. 그리고 완벽을 기하기 위해 -R <username> .npm
crowmagnumb을

기꺼이 도와 드리겠습니다 :) 그리고, 잘 잡아! 그런 말을하기 위해 응답을 수정하겠습니다.
TJ Kirchner

생명의 은인! 감사합니다
Matthew Cullum

21

필자의 경우 문제는 HOME 디렉토리가없는 사용자로 npm을 호출했기 때문에 다음 명령이 실패합니다.

sudo -u someUser npm install

해결책은 someUser쓰기 권한이 있는 HOME 디렉토리를 제공하는 것입니다 .

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

이것이 실제로 저에게 도움이 되었기 때문에 찬성했습니다. 저는 프로덕션 환경에 배포하고 있으며 사용자는 .npm 디렉토리를 가지고 있지 않습니다 (어쨌든 찾을 수 있음)
Stuart Watt

"chronos"사용자와 함께 ChromeOS에서 작동합니다.
Kyle Coberly

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"은 Unix System Resources/usr/local나타냅니다 .


1
아마도 새 답변으로 게시 된 것이 아니라 수락 된 답변에 대한 의견이어야합니다.
Kmeixner

그 답변의 저자는 이것을 알고 있지만 그의 답변을 업데이트하지 않았으므로 별도의 답변이 많이 필요하다고 말합니다.
Gui Prá

4

이 중 어느 것도 나를 위해 일하지 않았습니다. 다음을 수행하여 문자 그대로 루트로 실행해야했습니다.

sudo su -
sudo npm install forever -g

그런 다음 패키지가 Linux Ubuntu 14.04에 설치되었습니다.


실제로 npm을 루트로 실행해서는 안됩니다!
Antoine 'hashar'Musso


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 installaion 오류와 관련된 여러 가지 문제를 겪었습니다.

문제

다음은 배운 교훈과 항상 우리를 구해낸 근본적인 해결책의 목록입니다.

  1. node_modules , npm 로컬 설치 디렉토리는 255 자를 초과하는 경로를 처리 할 수없는 등의 OS 부족으로 수정으로부터 보호됩니다 .
  2. 명령 줄 도구를 사용하여 폴더를 지우면 폴더에 탐색기에있는 것처럼 액세스하려고 할 때 여러 가지 권한 오류가 발생하는 것처럼 보일 수 있습니다.
  3. 안티 바이러스 및 / 또는 로컬 정책 관리자에 따라 node_modules 폴더 를 생성 하고 나중에 액세스 또는 권한을 위임하여 여러 가지 설치 오류가 발생할 수 있습니다.
  4. npm 로그를 활성화하여 다음과 같은 가능한 문제에 대한 추가 정보를 얻습니다.

    npm install --loglevel verbose

근본적인

전 세계적으로 rimraf 설치

 npm install rimraf -g

node_modules에서 rimraf를 실행하십시오 .

rimraf yourDir/node_modules

그런 다음 실행하십시오.

npm install

경고!

또는 부족합니다. 명령 뒤에 오는 것에 대해 매우주의하십시오 rimraf. 경고, 프롬프트, 아무것도 없습니다. 그것은 마치 그곳에 없었던 것처럼 지구의 깨끗함 단계에서 단순히 디렉토리를 지 웁니다. 자신의 책임하에 시도하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.