개발/TypeScript

🫧TS:: AWS 배포하다가 때려잡은 에러 10개 정리.....(ㅎr)

hyuunii 2023. 1. 16. 21:41

진짜 토할뻔했다 오류가 너무 많이 생겼다.

다 타입 도입한것 때문인데.. 부들부릅ㄷㄹ붇릅둛들..... 하 암튼...

근데 이유를.. 모르겠다.

웹스톰에서는 잘만 굴러가던 애들이!!!!!!!!!!!! 왜!!!!!!!!!!!! 대체 왜!!!!!!!!!!!!!!!!!!!!!

리눅스에서는 왜 안되는거냐고........ 도대체 삽질을 얼마나 한건지 모르겠어 정리하기도 힘들어 지금.............

 

일단 우분투에서 TS 돌릴때는 node app.js 아니고 ts-node app.ts

글고 pm2로 돌리는 방법은....... 나도 모르겠다(ㅅ..발.....) 그것도 에러가 너무 많이 나오는데 아직 해결이 안되는중...... 하............

 

 

해볼만한 기초적인 시도들

sudo su

npm i -g ts-node

sudo apt-get install -y nodejs

sudo apt-get install -y mongodb-org

sudo systemctl start mongod

vim .env

 

 

 

에러 10개

1.

에러 1: SyntaxError: Cannot use import statement outside a module

/home/ubuntu/SideProject01/app.ts:1
import "dotenv/config";
^^^^^^

SyntaxError: Cannot use import statement outside a module

에러 1 해결: package.json 열고 "type": "module" 추가

{
  "name": "1st Side Project",
  "version": "1.0.0",
  "type": "module",

 

 

 

2. 에러 1 때려잡으니 나오는 에러 2

에러 2: Error: EACCES: permission denied, mkdir '/usr/lib/node_modules/ts-node'

에러 2 해결: sudo su

 

 

 

 

3. 에러 2 때려잡았더니 나오는 에러 3

에러 3: ReferenceError: exports is not defined in ES module scope

에러 3 해결: tsconfig.json 열고 compilerOptions에 "module": 이 "commonJs"일텐데 얘를 "esnext"로 변경

{
  "compilerOptions": {
  		...
		"module": "esnext",

 

 

 

4. 에러 3 때려잡았더니 나오는 에러 4

에러 4: TSError: ⨯ Unable to compile TypeScript:

/usr/lib/node_modules/ts-node/src/index.ts:859
    return new TSError(diagnosticText, diagnosticCodes, diagnostics);
           ^
TSError: ⨯ Unable to compile TypeScript:
app.ts:2:20 - error TS2792: Cannot find module 'helmet'. Did you mean to set the 'moduleResolution' option to 'node', or to add aliases to the 'paths' option?

에러 4 해결: tsconfig.json 열고 compilerOptions에 "moduleResolution": "node" 추가

{
  "compilerOptions": {
  		...
		"moduleResolution": "node",

 

 

 

5. 에러 4 때려잡았더니 나오는 에러 5

에러 5: CustomError: Cannot find module 

/usr/lib/node_modules/ts-node/dist-raw/node-internal-modules-esm-resolve.js:366
    throw new ERR_MODULE_NOT_FOUND(
          ^
CustomError: Cannot find module '/home/ubuntu/SideProject01/src/error/generalErrorHandler' imported from /home/ubuntu/SideProject01/app.ts

에러 5 해결: 

이상했다. 왜? 쟤를 못읽지? 설마 확장자를 적어줘야하나?하고 generalErrorHandler.ts라고 하니 새로운 오류가 등장했다.

 

 

 

6.

에러 6: TSError: ⨯ Unable to compile TypeScript

/usr/lib/node_modules/ts-node/src/index.ts:859
    return new TSError(diagnosticText, diagnosticCodes, diagnostics);
           ^
TSError: ⨯ Unable to compile TypeScript:
app.ts:7:33 - error TS2691: An import path cannot end with a '.ts' extension. Consider importing './src/error/generalErrorHandler.js' instead.

에러 6 해결: 개빡쳤지만 다시 vim app.ts하여 generalErrorHandler.ts를 generalErrorHandler.js로 바꿨다.

근대 너무너무 이상했다. 아니? 저걸? 왜? 바꿔???????????? 아무 문제 없던거를??????????? 했지만 일단 바꾸라니 바꿔줬다 ㅅㅂ

 

 

 

7. 

에러 7: CustomError: ERR_UNSUPPORTED_DIR_IMPORT

/usr/lib/node_modules/ts-node/dist-raw/node-internal-modules-esm-resolve.js:362
    const err = new ERR_UNSUPPORTED_DIR_IMPORT(path, fileURLToPath(base));
                ^
CustomError: ERR_UNSUPPORTED_DIR_IMPORT /home/ubuntu/SideProject01/routes /home/ubuntu/SideProject01/app.ts
    at finalizeResolution (/usr/lib/node_modules/ts-node/dist-raw/node-internal-modules-esm-resolve.js:362:17)
    at moduleResolve (/usr/lib/node_modules/ts-node/dist-raw/node-internal-modules-esm-resolve.js:801:10)
    at Object.defaultResolve (/usr/lib/node_modules/ts-node/dist-raw/node-internal-modules-esm-resolve.js:912:11)
    at /usr/lib/node_modules/ts-node/src/esm.ts:218:35
    at entrypointFallback (/usr/lib/node_modules/ts-node/src/esm.ts:168:34)
    at /usr/lib/node_modules/ts-node/src/esm.ts:217:14
    at addShortCircuitFlag (/usr/lib/node_modules/ts-node/src/esm.ts:409:21)
    at resolve (/usr/lib/node_modules/ts-node/src/esm.ts:197:12)
    at resolve (/usr/lib/node_modules/ts-node/src/child/child-loader.ts:15:39)
    at nextResolve (node:internal/modules/esm/loader:163:28) {
  url: 'file:///home/ubuntu/SideProject01/routes'

정확하게 뭔지는 모르겠으나.... 아무래도 또 확장자를 정확하게 붙여달라는 말인 것 같았다. 그래서 

에러 7 해결: vim app.ts하여 import routes from "./routes"로 되어있던 디렉토리 주소를 아래처럼 정확히 명기함.

import routes from "./routes/index.js";

 

 

 

8. 

에러 8: CustomError: Cannot find module

CustomError: Cannot find module '/home/ubuntu/SideProject01/services/users' imported from /home/ubuntu/SideProject01/controllers/users.ts

전부.. 이런식으로 뜨길래 이상해서 찾아보니 node 14이상의 경우 파일 불러와서 사용하는 경우 확장자까지 정확하게 적어줘야 한다는 내용을 발견.... 진짜 개빡쳤지만.........

에허 8 해결: 파일을 불러오는 모든(!) 파일을 열어서 정확히 확장자를 명기

 

 

 

9. 일일이 다 확장자 명기를 끝내가 새로운(!!!) 에러가(!!!!!!!) 발생... 하.........

에러 9: TypeError [ERR_IMPORT_ASSERTION_TYPE_MISSING

TypeError [ERR_IMPORT_ASSERTION_TYPE_MISSING]: Module "file:///home/ubuntu/SideProject01/swagger-output.json" needs an import assertion of type "json"

에러 9 해결: 문제가 발생한 지점(app.ts)열어서 코드 수정(뒤에 assert ~ 붙여줌)

import outputFile from "./swagger-output.json" assert { type: "json"};

했는데 저부분에 빨간줄 뜨면 tsconfig.json 열고 compilerOptions에 resolveJsonModule 키값 true로 해주기

"resolveJsonModule": true

 

 

 

10. 하니까 서버가 열림!!!!!!!!!! 근데 갑자기 몽고db 에러가 발생;;;;;;;;;

에러 10: 

MongooseServerSelectionError: Could not connect to any servers in your MongoDB Atlas cluster. One common reason is that you're trying to access the database from an IP that isn't whitelisted. Make sure your current IP address is on your Atlas cluster's IP whitelist: https://docs.atlas.mongodb.com/security-whitelist/

에러 10 해결: atlas 접속 후 network access - add IP adress - 니 IP만 추가하든가 아님 0.0.0.0/0 해서 전부 다 허용

 

 

 

하니까 서버는 열렸다....