상황
yarn berry를 적용하기 위해 node의 버전을 업데이트하는 과정에서, Node 공식 홈페이지의 installer를 이용하여 node v16.18.0을 설치한 후부터 CLI 입력 시 permission 에러가 발생했다.
에러 내용
EACCES: permission denied, symlink '... /corepack/dist/pnpm.js' → '/usr/local/bin/pnpm'
원인
We do not recommend using a Node installer, since the Node installation process installs npm in a directory with local permissions and can cause permissions errors when you run npm packages globally.
npm docs에서는 Node installer를 사용하여 Node를 설치하는 경우, npm을 local permission으로 설치하기 때문에 npm packages를 전역에 설치할 때 permission error가 발생할 수 있다고 한다. 이를 해결하기 위해 NVM(Node Version Manager)을 이용하여 Node와 npm을 설치할 것을 강력히 권고하고 있다.
해결 방법으로는 nvm으로 Node를 재설치하는 방법과 수동으로 NPM의 default directory를 바꾸는 방법이 있다.
NVM으로 Node 설치하기
1. nvm 설치하기 (bash)
* mac OS의 경우 Catalina부터는 zsh을 default로 사용하지만 이전 버전은 bash를 default로 사용한다.
터미널에서 아래의 script를 실행한다.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash

환경 변수를 등록해야 nvm 명령어를 CLI로 사용할 수 있기 때문에, 아래의 script를 터미널에서 실행하여 환경 변수를 설정한다.
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
환경 변수 설정까지 완료했다면, 버전을 확인하는 스크립트를 입력하여 정상적으로 nvm이 설치되었는지 확인해보자.
$ nvm -v
// 0.39.2
* 환경 변수를 설정하지 않은 경우, nvm 명령어를 사용할 때마다 nvm command not found 에러를 확인할 수 있다.
$ nvm -v
// nvm command not found
* brew를 통해 nvm을 설치하는 방법도 있지만 환경 변수를 수동으로 직접 설정해야 한다는 차이가 있다.
2. node 사용하기
원하는 버전의 node를 사용하기 위해서는 설치 과정이 필요하다.
$ nvm install 16.18.0 // 16.18.0 버전 설치
$ nvm install 16 // 16.x 버전 중 최신 버전(마지막 버전)을 설치
$ nvm install // 가장 최근에 release된 버전을 설치
설치가 완료되었다면 아래의 script를 이용하여 해당 버전의 node를 이용할 수 있다.
$ nvm use 16

설치할 버전의 노드가 기억나지 않을 경우에는 아래의 script를 이용하여 설치 가능한 node 버전을 확인할 수 있다.
$ nvm ls-remote
NPM default directory 변경하기
최상위 경로에 전역 packages가 위치할 폴더(npm-global)를 생성한다.
$ mkdir ~/.npm-global
새로 생성한 폴더(npm-global)의 경로를 npm이 사용하도록 환경 변수를 수정한다.
$ npm config set prefix '~/.npm-global'
profile 파일을 연다.
$ vi ~/.profile
profile 파일의 최하단에 아래의 script를 입력한다.
export PATH=~/.npm-global/bin:$PATH
:wq를 순서대로 입력하여 변경된 내용을 저장하고, 변경된 프로필을 적용한다.
$ source ~/.profile
sudo 명령어를 생략한 채로 packages를 전역에 설치하여 정상적으로 directory가 변경되었는지 확인한다.
* profile 파일을 직접 수정하지 않고, 프로젝트 내에서 env 파일을 생성하여 환경 변수를 수정할 수도 있다.
NPM_CONFIG_PREFIX=~/.npm-global
출처
https://github.com/nvm-sh/nvm#installing-and-updating
https://docs.npmjs.com/downloading-and-installing-node-js-and-npm
https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally
'개발' 카테고리의 다른 글
| Babel (0) | 2022.10.26 |
|---|---|
| 주소창에 google.com을 치면 발생하는 일 (0) | 2022.10.12 |
| MIME (0) | 2022.10.02 |
| React.createPortal (0) | 2022.09.28 |
| JSX (0) | 2022.09.28 |
댓글