오류 : 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
이 문제를 해결하는 방법에 대해서는 NPM의 공식 안내서를 참조하십시오. docs.npmjs.com/…
Dzhuneyt

답변:


488

파일 권한을 변경하십시오.

먼저 디렉토리를 소유 한 사람을 확인하십시오.

ls -la /usr/local/lib/node_modules

node_module 폴더가 root에 의해 소유되어 있기 때문에 액세스를 거부하고 있습니다.

drwxr-xr-x   3 root    wheel  102 Jun 24 23:24 node_modules

따라서 루트는 사용자로 변경하고 현재 사용자를 확인하기 위해 먼저 아래 명령을 실행하여 변경해야합니다 . 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
명령에 sudo를 추가해도 작동하지 않는 경우가있었습니다. 이것은 나를 위해 일했으며 대답을 받아 들여야합니다.
Niroj Shr

1
우리 회사는 Microsoft Active Directory Single Sign On을 사용합니다. 따라서 그룹 이름에는 슬래시가 있고 그 안에 공백이 있습니다. 이것은 이것을 조금 더 어렵게 만듭니다. 내가 사용한 명령은 sudo chown -R myuser:Company\\Domain\ Users /usr/local/lib/node_modules입니다. 내가 한 그룹 이름을 제대로 나열하려면 id -gn myuser.
Patrick

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과 함께 npm을 설치하는 것이 좋습니다.
Adam

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

이것은 실제로 권장되는 솔루션이며 장기적으로 가장 좋은 솔루션입니다.
Al-Mothafar

49

/ local / lib의 소유자에게 USER를 추가하기 만하면됩니다.

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

7
향후 독자가 권한을 이해하지 못하면 공식 문서 NPM 설명서를 참조하여 문제를 올바르게 해결하십시오. docs.npmjs.com/... . 특히, 미래의 독자는 아마해야 노드 버전 관리자 (권장)으로 NPM 다시 설치
ordonezalex

1
이것은 매우 간단합니다. 또한 lib의 어떤 것도 다시 걱정할 필요가 없다는 것을 의미합니다. / usr / local / lib를 소유하고 있습니다.
Obinna Nnenanya '

4
이것은 좋은 해결책 이 아닙니다 . 위에서 실행 chown하면 전체 파일 시스템의 권한 구조가 손상 될 위험이 있습니다.
Lars

3
이 명령으로 모든 권한이 손상되었습니다. 모든 것을 다시 복구해야합니다.
Azam Alvi

4
정확하게 말하면 이것은 소유자를 추가 하지 않습니다 . 이것은 소유자를 변경 하는 것입니다. 소유자를 추가하는 것보다 훨씬 더 파괴적 이며 거의만큼 파괴적 sudo chmod -R 777 /입니다.
SOFe

29

시도중인 명령 앞에 sudo 를 추가하십시오 .

이처럼 : sudo npm install

Linux / UNIX에서 명령에 sudo를 사용하면 일반적으로 권한이 수퍼 유저 레벨로 높아집니다. Windows에서 수퍼 유저 계정은 일반적으로 '관리자'라고합니다. Linux / Unix에서 수퍼 유저 계정의 이름은 일반적으로 'root'입니다.

루트 사용자는 컴퓨터의 거의 모든 파일에 액세스, 수정 또는 삭제할 수있는 권한이 있습니다. 일반 사용자 계정은 더 적은 수의 파일에 액세스, 수정 또는 삭제할 수 있습니다. 일반 계정에 대한 제한은 컴퓨터를 무단 또는 유해한 프로그램이나 사용자로부터 보호합니다. 일부 프로세스에서는 일반적으로 액세스 권한이없는 파일 또는 폴더에 대한 작업을 수행해야합니다. 모든 사람이 액세스 할 수있는 프로그램을 설치하는 것이 이러한 작업 중 하나입니다.

귀하의 경우 sudo를 사용하여 설치 명령을 실행하면 수퍼 유저의 권한이 부여되고 일반 사용자가 수정할 권한이없는 파일을 수정할 수 있습니다.


57
npm 패키지를 설치하는 동안 sudo를 사용하지 마십시오. 이러한 경로를 더 깊이 사용하면 나중에 수정하기가 더 어려워집니다. 다른 답변에서 지적한 것처럼 npm 폴더에 대한 권한을 변경하고 더 나은 삶을 사십시오.
Lukas Liesis

2
작동하지만 시간이 지남에 따라 지속적인 문제가 발생합니다. 모든 종류의 권한 거부 오류를 원하지 않으면이를 피하십시오. npm 캐시 폴더 거부와 같이 설치가 거부되었습니다.
Lukas Liesis

1
사용자가 권한을 이해하지 못하는 경우 패키지 설치가 매우 위험한 선례를 설정하기 전에 sudo를 사용하므로이 답변을 제거해야합니다. 코어 노드 위치의 소유권을 한 번 변경 한 첫 번째 답변을 참조하십시오.
SeaWarrior404

19

@okanda가 제공 한 답변의 해결책을 시도했지만 효과가 없었습니다.

그러나이 스레드에서 언급 한 것처럼 여러 폴더에 대해 완벽하게 작동했습니다 : https://github.com/angular/angular-cli/issues/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/

감사합니다.이 답변이 도움이되었습니다. 우분투 18.04.3
bakhti_UZB

다른 솔루션은 이전에 작동했지만 이번에는 폴더를 작동하는 데이 모든 것이 필요했습니다. 감사. 맥 v 10.15.2
Amir5000

1
프로덕션 서버에서 실행해도 안전합니까?
Cheezey

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 ~/.npmsudo 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

반응 엑스포를 설치하려고했지만 sudo와 별도로 --unsafe-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

노드 버전 관리자 또는 노드 설치 프로그램을 통해 npm을 설치할 수 있습니다. 에서 문서 가 말했다 :

노드 설치 프로세스는 로컬 권한이있는 디렉토리에 npm을 설치하고 npm 패키지를 전체적으로 실행할 때 권한 오류가 발생할 수 있으므로 노드 설치 프로그램을 사용하지 않는 것이 좋습니다.

당신이 가지고 있기 때문에 권한 오류를 , 당신은 아마 노드의 설치 프로그램을 통해 NPM을 설치하고 지금은 NVM (노드 버전 관리자)와 함께 다시 설치해야합니다.

운 좋게도 이것은 매우 간단합니다. 현재 버전의 npm 또는 Node.js를 제거 할 필요도 없습니다.

당신이해야 할 일은

  1. nvm을 설치하십시오. OSX 또는 Linux 노드의 경우 :

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash

    홈 디렉토리에 nvm 폴더가 생성됩니다.

그때

  1. nvm을 통해 npm 및 node.js를 설치하십시오. 그렇게하려면 전화

    nvm install stable

이제 in 폴더 sudo의 소유자를 사용 하거나 변경 하지 않고 패키지를 전체적으로 설치할 수 있습니다 .node_modulesusr


답변 아담 감사합니다! 나중에 빌드 / 환경 설정 프로세스에서 가능한 합병증이 무엇인지 궁금하십니까?
吖 奇 说-何魏奇 Archy

또한 fishnvm이 제대로 작동하려면 사람들을 위해 정교화 하기 위해 nvm은 물고기 포장지 github.com/FabioAntunes/fish-nvm이
吖 奇 说-何魏奇 Archy

@ 吖 奇 说 ARCHYSHUō nvm으로 노드를 설치할 때 어떤 합병증도 들어 본 적이 없습니다. 그리고 그것은 공식 문서에서 권장되기 때문에, 가장 좋은 방법처럼 보입니다. :)
Adam

7

sudo 사용자 로 설치하려면이 명령을 사용하십시오 npm .

sudo npm install -g create-react-app 

npm 대신 -g create-react-a pp 설치하십시오.


npm 패키지를 설치하는 동안 @ Lukas- 인용 sudo 사용. 이러한 경로를 더 깊이 사용하면 나중에 수정하기가 더 어려워집니다. 다른 답변에서 지적한 것처럼 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_modulesif npm 프로젝트에 있는 로컬로 설치된 스크립트를 사용할 수도 있습니다 .

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

/ usr / bin / env 와 같은 메시지 : 'node': 해당 파일이나 디렉토리가 표시 되지 않으면nodejs-legacy (Debian / Ubuntu)를 설치하십시오.

IMHO는 -g(또한 사용하는 sudo) 결과가 확실하지 않은 경우 hic sunt dracones 와 같습니다 .

자세한 정보 :


4

이는 npm글로벌 node_modules디렉토리에 로컬로 액세스 할 수 없어서 발생했습니다.

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

예 :

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

문제를 해결하면 이제 다시 실행 한 명령을 실행할 수 있습니다.


3

간단히 다음과 같이 명령하기 전에 소유자를 변경하거나 sudo를 사용할 수 있습니다

sudo chown -R [owner]:[owner] /usr/local/lib/node_modules( 소유자 변경 )

또는

sudo npm install -g json-server

그게 다야.


3

리눅스 / 우분투의 경우 명령이

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는 수퍼 유저로 다음 명령을 실행
rustyDev

같은 일부 패키지 create-react-app는 글로벌 패키지로 설치하려면 루트 권한이 필요합니다. 그렇지 않으면 설치할 수 없습니다. 그러나 reactjs 팀 npx create-react-app app_name은 글로벌 패키지를 설치하는 대신 다음 명령을 사용하도록 권장 합니다.
Fatema T. Zuhora



2

오랜 연구 끝에 Mac OS가 각도 cli를 설치하는 데 필요한 것은 아무것도 없다는 것을 이해했습니다. sudo npm install -g @angular/cli터미널을 사용 하면 암호를 입력하라는 메시지가 표시되어 cli를 설치합니다. 그것은 나를 위해 일했다.



2

Linux를 실행중인 경우 (예 : 아치)

# npm -g install packageName

기본적으로이 명령은 / usr / lib / node_modules / npm에 패키지를 설치하며 루트 권한이 필요합니다.

사용자 전체 설치를 허용하려면

현재 사용자의 글로벌 패키지 설치를 허용하려면 npm_config_prefix환경 변수를 설정하십시오 . 이것은 npm과 yarn 모두에서 사용됩니다.

~/.profile
PATH="$HOME/.node_modules/bin:$PATH"
export npm_config_prefix=~/.node_modules

변경 사항을 업데이트하려면 다시 로그인하거나 소스하십시오.

에 대한 --prefix매개 변수를 지정할 수도 있습니다 npm install. 그러나 전역 패키지를 설치할 때마다 추가해야하므로 권장하지 않습니다.

$ npm -g install packageName --prefix ~/.node_modules

따라서 폴더 permision을 숨길 필요가 없습니다.


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은 npm 구성 "접두사"옵션과 호환되지 않습니다 : 현재 ""로 설정 됨

  1. 옵션을 설정 해제하려면 이것을 실행하십시오 :
nvm use --delete-prefix v10.12.0

위의 명령을 따르면 Ubuntu에 반응 / 각도를 설치할 수 있습니다.


1

사용 'XYZ를 설치 sudo는 NPM' 이 작동합니다.



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}

그 트릭을해야합니다, 건배!

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