백엔드, 기타/버그보따리, etc

맥북에서 Node.js를 설치하거나, npm install할 때, permission denied가 뜨는 경우 해결 방법

데브힐러 2022. 1. 5. 23:57
반응형

맥북 터미널에서 Node.js를 설치하는 도중, 혹은 npm install {package}-g 을 하는 경우, 다음과 같은 에러가 발생하는 경우가 있다.

heckPermissions Missing write access to /usr/local/lib/node\_modules

npm ERR! code EACCES

npm ERR! syscall access

npm ERR! path /usr/local/lib/node\_modules

npm ERR! errno -13

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! }

이는 맥북에 권한(permission) 설정이 안되어 있기 때문이다. 해결방법은 세가지가 있다.



Option 1: 권한을 npm의 default 디렉토리로 변경하기

  • npm이 설치되는 default 디렉토리에 권한을 허용하도록 설정을 변경하는 것이다.

1) npm의 디렉토리가 있는 path 찾기:

다음 커맨드를 입력하면 npm 디렉토리가 있는 path가 뜬다.

npm config get prefix

대부분의 시스템들은 /usr/local로 되어있다.


경고: 만약 path가 단순히 /usr로 설정되어 있다면, 2)번을 시행하지 말고 Option 2를 시도해 볼 것.
/usr인 경우에 강제로 권한 설정을 바꾸면 문제를 야기할 수 있다.


2) 소유자(owner)의 npm 디렉토리를 current user name으로 된 디렉토리로 바꾸기.

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node\_modules,bin,share}

위의 명령어를 그대로 복붙하면 된다.


이 명령어는 npm에 속한 하위 폴더들(sub-folders)의 권한을 변경하며, 다른 도구들 (lib/node_modules, bin, and share)의 권한도 변경 한다.



Option 2: npm의 default 디렉토리를 다른 디렉토리로 변경하기

npm이 사용하는 default 디렉토리가 /usr로 설정되어 있는 경우 계정 권한을 강제로 바꾸지 않는게 좋다. 예를 들어 다른 사용자와 맥 시스템을 함께 사용하는 경우 문제를 야기할 수 있기 때문이다.

그 대신, npm이 다른 디렉토리를 함께 사용할 수 있도록 구성(configure)할 수 있다. 이 경우, 홈 폴더(home folder)에서 숨겨진 디렉토리를 생성하는 것이다.


1) 전역 설치(global installation)를 위한 폴더를 생성한다:

mkdir ~/.npm-global

2) npm이 새로운 디렉토리의 path를 사용하도록 구성(configure)한다:

npm config set prefix '~/.npm-global'

3) ~/.profile 파일을 열거나 생성하여 export PATH 라인을 추가한다:

  • .profile 수정하기

    vim ~/.profile

  • i를 누르면 입력모드로 바뀌고 터미널 하단에 INSERT라는 글자가 뜬다.

  • 맨 위에 다음 line을 복사하여 입력하자.

    export PATH=~/.npm-global/bin:$PATH
  • :wq를 눌러 저장과 동시에 입력을 종료한다.


4) 커맨드 라인으로 돌아가 시스템 변수를 업데이트 하기:

source ~/.profile

Test: sudo 명령어를 사용하지 않고 설치하고 싶은 package를 전역으로 다운로드 해보기.
  • npm install {package name} 을 시도하다가 permission denied 되어 이 글을 보고 있는 것이라면, package를 전역으로 다운로드 해 본다.
npm install node-g.raphael --save
-- 혹은 자신이 설치하고 싶은 package를 global로 설치해 본다.

  • node.js를 설치할 때 permission denied 에러가 난 것이었다면, node.js를 다시 설치해 본다. 설치가 제대로 된다면 성공이다.

cf) 방법 2), 3), 4) 대신, ENV 변수를 사용할 수 도 있다. (예: ~/.profile 파일을 변경하고 싶지 않은 경우)
NPM\_CONFIG\_PREFIX=~/.npm-global



Option 3: 패키지 매니저가 알아서 권한 설정을 하고 npm default 디렉토리를 설정해주도록 하기.

위의 방법들은 사용자가 직접 권한 설정을 하는 것이다. Node를 Mac OS에 처음 설치하는 거라면, Homebrew를 이용해보자.
Homebrew는 사용자 권한과 default 디렉토리를 적절하게 설정해 준다. 물론, 설치시 맥 계정의 비밀번호를 입력해야 한다.


Homebrew 설치 후, 다음 명령어를 실행한다.

brew install node

반응형