2026. 7. 18.
npm ERR! enoent Could not read package.json, 첫 확인은 현재 폴더입니다
npm 명령이 package.json을 읽지 못했다면 캐시나 node_modules를 지우기 전에 현재 폴더, 오류의 path, npm이 찾은 패키지 루트를 먼저 비교해야 한다.

npm install이나 npm run dev 직후 npm ERR! enoent Could not read package.json이 나왔다면 패키지를 다시 설치하기 전에 터미널이 어느 폴더를 보고 있는지 확인해야 한다. ENOENT는 Node.js에서 지정한 경로의 파일이나 디렉터리를 찾지 못했다는 뜻이다. 이 오류에서는 캐시보다 오류에 찍힌 path와 현재 폴더가 같은 프로젝트를 가리키는지가 첫 판단 기준이다.
첫 확인 순서는 짧다. PowerShell은 Get-Location, macOS와 Linux는 pwd로 현재 폴더를 출력한다. 그 경로를 오류의 path와 비교하고 npm prefix로 npm이 잡은 패키지 루트를 확인한다. 세 경로가 다른 프로젝트를 가리키면 package.json이 있는 앱 폴더로 이동한 뒤 처음 실패한 명령을 다시 실행한다.
첫 확인은 현재 폴더와 오류의 path를 맞추는 일이다
PowerShell에서는 Get-Location, macOS와 Linux 셸에서는 pwd로 현재 위치를 출력한다. 이어서 npm이 패키지 루트로 판단한 경로와 그 폴더의 파일을 확인한다.
Get-Location
npm prefix
Test-Path .\package.json
Get-ChildItem -Name
macOS나 Linux에서는 같은 확인을 다음처럼 할 수 있다.
pwd
npm prefix
test -f package.json && echo "package.json 있음" || echo "package.json 없음"
ls
오류 로그에 path C:\work\package.json이 찍혔는데 실제 파일은 C:\work\my-app\package.json에 있다면 cd my-app으로 이동한 뒤 원래 명령을 다시 실행한다. npm의 Folders 문서는 현재 작업 폴더에서 위쪽으로 올라가며 package.json이나 node_modules가 있는 패키지 루트를 찾는다고 설명한다. npm prefix 문서의 출력도 이 판단을 확인하는 데 쓸 수 있다.
package.json이 있는 폴더를 찾으면 문제의 종류가 갈린다
현재 폴더에 package.json이 없다면 먼저 하위 폴더를 찾는다. 압축 파일을 풀었을 때 바깥 폴더가 한 겹 더 생기거나, AI 도구가 my-app 같은 하위 폴더에 프로젝트를 만든 경우가 있다.
Get-ChildItem -Recurse -Filter package.json -File |
Where-Object { $_.FullName -notmatch '\\node_modules\\' } |
Select-Object -ExpandProperty FullName
검색 결과가 하나라면 그 파일이 있는 폴더로 이동한다. 여러 개라면 실행하려는 앱의 scripts와 소스 폴더를 함께 보고 고른다. 기존 프로젝트에서 파일을 못 찾았다는 이유만으로 npm init -y를 실행하면 안 된다. 그 명령은 새 package.json을 만드는 npm 공식 절차이므로, 내려받은 프로젝트의 사라진 파일을 복구하지 않는다.
파일은 있지만 다른 오류가 나오면 문제를 바꿔 읽는다. JSON 문법 오류라면 npm EJSONPARSE에서 첫 문법 위치를 찾는 순서를 따른다. Missing script: "dev"라면 package.json의 scripts를 확인하는 방법이 다음 단계다. ENOENT가 사라졌다면 경로 문제는 이미 분리된 것이다.
모노레포에서는 npm prefix만 믿지 말고 앱 폴더를 직접 본다
저장소 하나에 apps/web, apps/admin, packages/ui처럼 여러 package.json이 있을 수 있다. npm prefix는 가장 가까운 패키지 루트를 보여 주지만 공식 문서에 따르면 workspace를 인식하지 않는다. 따라서 모노레포에서는 루트 package.json의 workspaces와 실행할 앱 폴더의 package.json을 모두 확인한다.
예를 들어 웹 앱만 실행하려는 경우 다음 두 경로를 비교한다.
C:\work\repo\package.json
C:\work\repo\apps\web\package.json
루트 scripts가 dev:web을 제공하면 루트에서 그 명령을 쓴다. 앱 폴더가 자체 dev script를 제공하면 apps\web으로 이동해 실행할 수 있다. npm의 Scripts 문서는 script가 패키지 폴더의 루트에서 실행되고, 처음 명령을 호출한 위치는 INIT_CWD에 남는다고 설명한다. 프로젝트 README에 실행 위치가 적혀 있다면 그 지시가 우선이다.
같은 명령의 성공 출력까지 확인해야 수정이 끝난다
폴더를 옮긴 뒤에는 다른 명령을 시도하지 말고 처음 실패한 명령을 그대로 다시 실행한다. 그래야 경로 수정이 효과가 있었는지 비교할 수 있다.
Get-Location
Test-Path .\package.json
npm prefix
npm run dev
확인 결과는 세 가지면 충분하다.
- 현재 폴더가 의도한 앱 또는 패키지 루트다.
package.json존재 여부가True로 나온다.- 출력에서
Could not read package.json과 해당 ENOENT가 사라진다.
새 오류가 나오면 첫 오류 코드와 첫 파일 경로를 기준으로 다음 문제를 분리한다. 정상 실행됐다면 성공한 경로와 명령을 README나 작업 메모에 한 줄 남긴다. 다음 세션에서 터미널이 상위 폴더로 열려도 같은 진단을 반복하지 않게 된다.
참고한 공식 문서는 Folders (npm Docs), npm-prefix (npm Docs), Scripts (npm Docs), Errors (Node.js Documentation)이다.
이 글은 AI 코딩과 개발 학습의 일반 정보 제공 목적입니다. 도구, 모델, 커리큘럼, 요금은 버전과 시점에 따라 달라질 수 있으므로 실습이나 도입 전 공식 문서와 최신 릴리스 노트를 확인하세요.
다음으로 읽을 기사
같은 흐름으로 이어 읽기 좋은 기사만 추려 보여줍니다.
첫 번째 댓글을 남겨보세요
여러분의 생각이 다른 독자에게 도움이 됩니다.
댓글 0
이 글을 읽은 독자들의 생각을 나눠보세요.