TechFeedTechFeed
개발자 작업환경

ELIFECYCLE, npm ERR, exit status | 스크립트만 실패하면?

ELIFECYCLE은 npm이 틀린 게 아니라 package.json 스크립트가 0이 아닌 코드로 끝나 그 실패를 감싼 줄입니다. 위쪽 컴파일 에러, prepare·husky, CI 환경 변수. npm, Next.js, 한국 1인 개발자 기준. 2026년 9월 npm scripts·Node 종료 코드 문서.

by

ELIFECYCLE은 npm이 틀린 게 아니라, package.json 스크립트가 0이 아닌 코드로 끝나서 그 실패를 npm이 한 줄로 감싼 것입니다. 맨 아래 npm ERR! code ELIFECYCLE만 보면 원인이 안 보입니다.


설치는 됐는데 npm run buildprepare, 허스키 훅만 빨갛게 끝나는 경우가 흔합니다. 진짜 원인은 그 위 수십 줄에 있는 컴파일 에러나 테스트 실패예요.


스크립트 이름을 확인하고, 같은 명령을 npm 없이 직접 쳐 보세요. 피어 충돌로 설치가 멈춘 줄과는 칸이 다릅니다. 근거는 npm scripts 문서노드 종료 코드에 있습니다.


ELIFECYCLE은 설치 실패가 아니다

라이프사이클 스크립트가 실패해서입니다. npm은 prebuild, build, postinstall 같은 명령을 자식 프로세스로 돌리고, 그 프로세스가 0이 아니면 ELIFECYCLE을 붙입니다. 패키지를 못 깐 줄이 아닙니다.


ERESOLVE는 트리를 못 만들어 설치가 시작도 못 한 때입니다. Cannot find module은 실행 순간에 이름을 못 찾은 때이고, ELIFECYCLE은 명령은 시작됐는데 안에서 죽은 때예요. 맨 아래 코드만 검색하면 세 줄이 섞입니다.


로그를 위로 스크롤해 Failed to compile, Error:, 테스트 실패 블록을 찾으세요. 그게 고칠 줄입니다. 설치 충돌은 ERESOLVE 글, 모듈 이름은 Cannot find module 글을 보세요.


맨 아래 한 줄은 포장 | errno 1ELIFECYCLE은 원인 이름이 아닙니다. 그 위에 있는 첫 에러 블록이 실제 실패입니다. 검색도 그 블록으로 하세요.


npm run build가 자식 스크립트 실패를 ELIFECYCLE로 감싸 출력하는 터미널 개념 이미지
ELIFECYCLE은 스크립트 실패를 감싼 코드다

어떤 스크립트가 죽었는지 먼저 보기

로그에 Failed at the 패키지이름@버전 스크립트이름 script가 있습니다. 그 이름이 build인지 prepare인지에 따라 처방이 갈립니다.


스크립트언제 도나먼저 볼 것
buildnpm run build, CI 배포next build 컴파일 에러, 타입
prebuild / prestart본 명령 직전 자동sitemap 생성, 환경 변수 유무
prepare / postinstallnpm install 직후husky, prisma generate
test / lintCI job실패한 스펙, eslint 파일
start프로덕션 기동포트 점유, 빌드 산출물 없음

CI에서만 나면 로컬에 있는 .env가 액션에 없는 경우가 많습니다. 스크립트가 환경 변수를 읽고 바로 process.exit(1) 하도록 짜여 있으면 ELIFECYCLE로만 보입니다. 폴더 환경은 direnv 글과 같이 보세요.


같은 명령을 npm 없이 재현
# 로그의 "Failed at the ... build script" 확인 후 # package.json 의 "build": "next build" 라면 npx next build # 종료 코드만 보기 npx next build; echo $? # 0 이 아니면 그 출력이 진짜 원인

위쪽 에러 블록을 읽는 순서

Error: 또는 Type error:가 고칠 줄입니다. 넥스트 빌드면 파일 경로와 행 번호가 붙습니다. 힙 부족이면 메시지가 다릅니다. 메모리가 모자란 줄은 heap out of memory 글로 나누세요.


타입 에러는 개발 서버에선 경고만 뜨고 next build에서 실패하는 경우가 있습니다. 로컬에서 같은 명령을 돌려야 CI와 맞습니다. ignoreBuildErrors로 숨기면 배포 후에 런타임이 깨집니다.


테스트 스크립트면 실패한 스펙 이름이 위에 있습니다. 전체를 끄지 말고 그 파일만 고치세요. lint가 0이 아니면 같은 포장으로 끝납니다.


npm 로그 위쪽의 컴파일 에러를 읽고 ELIFECYCLE 포장을 무시하는 흐름 이미지
고칠 줄은 맨 아래가 아니라 위쪽 첫 에러다

install 직후 prepare가 죽을 때

허스키가 prepare에서 .git을 찾다 실패하면 설치 전체가 ELIFECYCLE로 끝납니다. CI 체크아웃이 얕거나, 도커 이미지에 git이 없으면 흔합니다.


패키지 문서 기준으로 "prepare": "husky"는 저장소 안에서만 의미가 있습니다. 배포 이미지에서 소스만 복사해 npm ci를 치면 prepare가 훅을 설치하려다 죽어요. HUSKY=0을 CI에 두거나, prepare를 개발 전용으로 나누는 방법이 있습니다.


prisma generate를 postinstall에 붙여 둔 경우도 같습니다. generate가 URL을 읽다 실패하면 설치가 실패한 것처럼 보입니다. 연결 문제는 이 글이 아니라 네트워크 칸입니다. 이름 해석은 ENOTFOUND 글을 보세요.


  • [ ] Failed at the … 줄에서 스크립트 이름을 읽었다
  • [ ] 그 명령을 npm 없이 직접 돌려 위쪽 에러를 봤다
  • [ ] ERESOLVE·모듈 없음과 로그를 섞지 않았다
  • [ ] CI면 .env와 HUSKY=0 여부를 확인했다
  • [ ] ignore-scripts로 원인을 덮지 않았다

--ignore-scripts는 덮개 | 설치는 통과해도 훅과 generate가 빠집니다. 배포 이미지가 런타임에 또 죽습니다. 실패한 스크립트 이름을 고치는 쪽이 기본입니다.


고치는 순서

스크립트 이름 확인, 같은 명령 직접 실행, 위쪽 에러 수정, CI 환경 대조 순입니다. npm 캐시를 지우는 건 이 줄의 처방이 아닙니다.


로컬에서 초록인데 CI만 빨강이면 노드 버전, 환경 변수, git 유무를 맞춰 보세요. 버전 관리기는 mise·nvm 글을 참고하면 됩니다. 포트가 막혀 start가 죽은 경우에는 ELIFECYCLE 아래 EADDRINUSE가 있습니다.


한국에서 넥스트를 혼자 버셀에 올리면, 로컬 next dev는 되고 배포 next build만 타입 한 줄로 죽는 패턴이 잦습니다. 그때 맨 아래 ELIFECYCLE을 고치려 하지 말고, 빌드 로그의 파일 경로를 여세요.


CI에서 스크립트 이름과 종료 코드 확인
npm run build --verbose # Failed at the myapp@1.0.0 build script # 허스키를 CI에서 끄기 HUSKY=0 npm ci
CI에서 npm run build 로그의 스크립트 이름과 위쪽 타입 에러를 대조하는 흐름 이미지
로컬 next build와 CI 명령을 같게 맞춘다

참고 자료


내부 연계: ERESOLVE, 모듈을 찾을 수 없음, 빌드 메모리 부족


인용한 동작은 2026년 9월 공개 문서 기준입니다.


자주 묻는 질문

node_modules를 지워도 같은 줄입니다.

설치가 아니라 스크립트 실패입니다. 재설치는 원인을 안 지웁니다. Failed at the 줄의 명령을 직접 실행해 위쪽 에러를 고치세요.


로컬은 되고 CI만 ELIFECYCLE입니다.

노드 버전, 환경 변수, git·허스키 유무가 다릅니다. CI에서 같은 npm run 명령을 --verbose로 돌려 스크립트 이름을 확인하세요.


ERESOLVE와 무엇이 다른가요?

ERESOLVE는 의존성 트리를 못 만들어 설치가 멈춘 줄입니다. ELIFECYCLE은 이미 있는 스크립트가 0이 아닌 코드로 끝난 줄입니다. 로그 상단이 peer 충돌이면 ERESOLVE 칸입니다.


--ignore-scripts로 설치했습니다.

훅과 generate가 빠집니다. 당장은 초록이어도 다음 빌드나 런타임이 죽습니다. prepare가 문제면 HUSKY=0 같은 좁은 우회를 쓰세요.


next build가 타입 에러로 죽습니다.

그게 진짜 원인입니다. ELIFECYCLE은 포장입니다. 로그의 파일 경로를 고치고, ignoreBuildErrors로 숨기지 마세요.


start 스크립트만 실패합니다.

빌드 산출물이 없거나 포트가 막힌 경우가 많습니다. .next 존재 여부와 EADDRINUSE 메시지를 위쪽에서 찾으세요. 개발 서버 점유와 섞이면 포트 글과 자리를 나눕니다.


ELIFECYCLE은 스크립트가 0이 아닌 코드로 끝났다는 뜻입니다. 맨 아래 코드를 고치지 말고, 위쪽 첫 에러와 스크립트 이름을 보세요. 관련 글: ERESOLVE, 모듈을 찾을 수 없음, 빌드 메모리.


ELIFECYCLEnpm ERRexit statusscriptshusky빌드넥스트CI작업환경개발자

함께 보면 좋은 문제 해결

EXPLORE / 개발자 작업환경

이어서 읽어보기

전체 토픽 둘러보기