[Node.js] Error: EACCES: permission denied

Falcon·2023년 9월 25일
2

etc

목록 보기
5/5
post-thumbnail

주로 Mac OS + Node.js npm 개발 환경에서 npm install 시 쉽게 마주칠 수 있는 에러다.

Error: EACCES: permission denied, mkdir '/Users/Falcon/IdeaProjects/redis-springboot/src/main/frontend/node_modules/.vite/deps_temp_f4097ff7'
    at Object.mkdirSync (node:fs:1395:3)
    at runOptimizeDeps (file:///Users/Falcon/IdeaProjects/redis-springboot/src/main/frontend/node_modules/vite/dist/node/chunks/dep-df561101.js:45747:10)
    at file:///Users/Falcon/IdeaProjects/redis-springboot/src/main/frontend/node_modules/vite/dist/node/chunks/dep-df561101.js:45129:46
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

💡 원인

에러 첫줄만 해석하면 된다.
EACCESS: permission denied 접근 권한이 없단다.

=> 해당 디렉토리 or 파일 소유자가 누구인지 확인해보자.

파일 및 디렉토리 소유자 확인

# 소유자 확인
$ ls -al | grep <dir_name>
# 예시
$ ls -al | grep node_modules
drwxr-xr-x    3 Falcon  staff      96 Sep 25 07:21 assets
drwxr-xr-x    3 Falcon  staff      96 Sep 25 07:21 cli
drwxr-xr-x  471 root    staff   15072 Sep 25 07:57 node_modules
-rw-r--r--    1 Falcon  staff  285356 Sep 25 07:57 package-lock.json

node_modules 의 소유자가 root 로 설정되어 있다.
npm install 을 하는 주체는 Falcon (일반 유저) 인데 패키지 설치 경로인 node_modules 소유자가 root 기 때문에 permission denied 가 발생한 것이다.

🔑 해결 방법

$ sudo chown -R <username>:<groupname> <dir_name>
# 예시
$ sudo chown -R Falcon:staff node_modules

실 사용자 일반유저인 Falcon 으로 변경했다.

Q. 근데 왜 node_modules 소유자가 root 로 되어 있나요?

패키지 설치 당시에 sudo 로 설치했기 때문이다.
mkdir touch 같이 CLI 명령어는 명령어를 실행한 유저의 소유자로 기본 지정된다.

# 패키지 첫 설치 시점에 `sudo` (root) 로 입력
$ sudo npm install

npm install 명령어를 실행한 주체인 소유자 root 가 명령어로 설치한 node_modules 의 소유자가 됨.


참조 문서

profile
I'm still hungry

0개의 댓글