Error: Cannot find module '/usr/src/app/dist/main'
2023. 8. 10. 16:36ㆍ에러대응
문제 상황
EC2 우분투 환경에 docker 에 nestjs 로 만든 서버를 이미지로 띄우고 실행하려던 중 발생한 에러이다.
internal/modules/cjs/loader.js:934
throw err;
^
Error: Cannot find module '/usr/src/app/dist/main'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:931:15)
at Function.Module._load (internal/modules/cjs/loader.js:774:27)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:75:12)
at internal/main/run_main_module.js:17:47 {
code: 'MODULE_NOT_FOUND',
requireStack: []
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! ticket-nest@0.0.1 start:prod: `node dist/main`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the ticket-nest@0.0.1 start:prod script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2023-08-09T13_11_12_717Z-debug.log
생성했던 Dockerfile 이 의심스러워 이를 수정해보았음
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
# NestJS 프로젝트 빌드
RUN npm run build
COPY . .
EXPOSE 3000
CMD [ "npm", "run", "start:prod" ]
실행되지 않았음
Dockerfile 을 다시 변경해보았음
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
# NestJS 프로젝트 빌드
RUN npm run build
EXPOSE 3000
CMD [ "npm", "run", "start:prod" ]
build 의 위치만 바꾸어 보았음
하지만 여전히 실행되지 않았음
다시 Dockerfile 을 수정
//...
WORKDIR /usr/src/main.ts
// ...
실행안됨 이건 안될만 했음 ㅋ
다시 Dockerfile 을 변경했다. 이번에는 CMD 를 바꿔 주었다.
// ...
WORKDIR /usr/src/app
// ...
CMD [ "node", "dist/main" ]
성과가 있다 에러가 바뀌었다.
에러
ubuntu: ~/TicketNest$ sudo docker run -p 3000:3000 ticketnest:latest
/usr/src/app/node_modules/@nestjs/common/file-stream/streamable-file.js:31
this.options.length ??= bufferOrReadStream.length;
^^^
SyntaxError: Unexpected token '??='
at wrapSafe (internal/modules/cjs/loader.js:1029:16)
at Module._compile (internal/modules/cjs/loader.js:1078:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1143:10)
at Module.load (internal/modules/cjs/loader.js:979:32)
at Function.Module._load (internal/modules/cjs/loader.js:819:12)
at Module.require (internal/modules/cjs/loader.js:1003:19)
at require (internal/modules/cjs/helpers.js:107:18)
at Object.<anonymous> (/usr/src/app/node_modules/@nestjs/common/file-stream/index.js:4:22)
at Module._compile (internal/modules/cjs/loader.js:1114:14)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1143:10)
이 에러 메시지는 Node.js 에서 ??= 즉 널병합 연산자를 인식하지 못해서 발생하는 에러임.
이 연산자는 ES2020 에서 도입되었기 때문에 Node.js 14 에서는 지원을 안할수도 있을듯
SOLVE
버전을 올려보았다
FROM node:18 // 변경된 부분
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
RUN npm run migration:run // 마이그레이션 목적으로 추가함
EXPOSE 3000
CMD [ "node", "dist/main" ]
이미지 삭제 후에 재빌드 하니 성공했다.