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" ]

 

이미지 삭제 후에 재빌드 하니 성공했다.