NPM install permission 에러
VScode 의 터미널에서 글로벌로 yarn 설치를 시도했다.
npm install -g yarn
사실 node js 를 먼저 설치했던 이력이 있다면, yarn 과 비슷한 npm 이라는 기본적인 Package Manager가 자동으로 설치가 되어있긴 하다.
그럼에도 yarn 을 설치하는 까닭은
yarn 이 라이브러리를 설치해주고 관리해주는 Package Manager 의 일종이면서,
dependency 관리나 혹은 라이브러리들끼리의 충돌을 방지해주기 때문에 보다 더 성능이 좋다.
순조롭게 설치가 진행되겠거니 싶었지만,
보기만 해도 가슴이 두근거리게 되는 빨간글씨의 에러가 발생했다.
npm ERR! code EACCES
npm ERR! syscall mkdir
npm ERR! path /usr/local/lib/node_modules/yarn
npm ERR! errno -13
이유?
➡️ 대부분은 공용 머신이거나 mac 이용환경에서 발생하고,
npm 이 global 스콥 (-g) 으로 파일을 쓰려는 폴더에 접근 권한이 없기 때문에 발생하게 된다.
해결방안 (1, 2, 3)
해결하기에 앞서 우선, npm의 디렉터리 상태를 확인해야 한다.
npm config get prefix
- /usr/local 로 뜨는 경우(대부분의 경우일 것이다.) ➡️ 해결방안 1
- /usr 로 뜨는 경우 ➡️ 해결방안 2
해결방안 1
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
위 코드에 마우스를 올리면 버튼 하나가 생기는데, 복사할 수 있으니 터미널에 붙여넣기 하면 된다.
하위 폴더의 권한까지 모두 변경하게 된다.
다시 처음 install 코드를 입력하면 이제는 에러 없이 설치가 잘 될 것이다.
해결방안 2
이 경우는 공통 디렉터리의 owner를 변경하지 않아야한다.
먼저 hidden 디렉터리를 생성하고, 차근차근 따라해보도록 한다.
1) global 설치를 위한 디렉토리를 생성한다.
mkdir ~/.npm-global
2) 새 디렉토리 경로를 사용하도록 npm을 구성(config)한다.
npm config set prefix '~/.npm-global'
3) ~/.profile 파일을 열거나 생성한 뒤, export Path 구문을 추가한다.
- ~/.profile 파일 수정
vim ~/.profile
- i 키를 누르면 입력모드로 바뀌고, 터미널 하단에 INSERT 라는 글자가 뜬다.
- 맨 위에 이 구문을 입력한다.
export PATH=~/.npm-global/bin:$PATH
- :wq 를 눌러서 저장 및 종료한다. (write & quit)
4) 시스템 변수를 업데이트 한다.
source ~/.profile
5) sudo 명령어를 사용하지 않고 설치하고 싶은 package를 다운로드 해본다.
( yarn 을 설치하려고 하기 때문에, -g 다음 yarn을 적어보았다. 다른 패키지를 설치하고자 한다면 yarn 대신에 입력하면 된다. )
npm install -g yarn
p.s) 만약 ~/.profile 파일을 수정하고 싶지 않다면, 2) 3) 4) 의 과정 대신에 ENV 변수를 사용할 수도 있다.
NPM\_CONFIG\_PREFIX=~/.npm-global
해결방안 3
brew install node
해결방안 1, 2 는 사용자가 직접 권한을 설정하는 것이다.
node를 mac os에 처음 설치하는 것이라면, homebrew 를 이용해도 좋다.
homebrew는 사용자 권한과 default 디렉토리를 적절하게 알아서 설정해준다.
나는 해결방안 1 를 이용해서 해결했다.
정상적으로 설치 완료 !
참고 1 : https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally