[Node,JS] babel..그리고 ESmodule..을 활용하려면 에러의 투성이들을 해결해야 다음단계로 기능을 구현할 수 있다..(모듈의 활용을 잘하려면 기본을 잘 숙지하고 있어야 한다)

여리·2023년 7월 20일
0

블로그의 이전 내용에는 서버가 동작할 수 있도록 하는 최소한의 초기세팅에 대한 주제로 commonJS, ESmodule에 대해서 다뤘다.

이전 블로그 내용 보러가기 🔗[JS 초기셋팅] commonJS vs ESmodule 그리고 확장하여 각 module type별 express와 typeorm의 연결에 대한 문제 해결

그리고 자세히 다루지는 않았지만 NodeJS는 commonJS를 기본 타입으로 활용하는 런타임환경으로 ES6로 넘어오면서 추가되는 부분에 대해 잘 호환 될 수 있도록 babel이라는 패키지에 대해서도 남겨놓았다.(이전 블로그 내용 하단부에 babel링크로 들어가서 확인해보자!)

일단 bable 패키지를 필요한 정도로만 설치할 수 있도록 하자

//package.json{
  "name": "test-es-module",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "nodemon server.js --exec babel-node"
  },
  "repository": "https://github.com/xxxxxx/Txxxxxxxx.git",
  "author": "xxx <xxxxxx@gmail.com>",
  "license": "MIT",
  "type": "module",
  "dependencies": {
    "cors": "^2.8.5",
    "dotenv": "^16.3.1",
    "express": "^4.18.2",
    "mysql2": "^3.4.3",
    "typeorm": "^0.3.17"
  },
  "devDependencies": {
    "@babel/core": "^7.22.9",
    "@babel/node": "^7.22.6",
    "@babel/preset-env": "^7.22.9",
    "morgan": "^1.10.0",
    "nodemon": "^2.0.22"
  },
  "babel": {
    "presets": [
      "@babel/env"
    ]
  }
}

일단 이정도의 세팅을 해놓고 진행해보자. 진행하는데는 문제가 없다.

그렇게 셋팅을 하고 ping test(서버 작동 pre 테스트)는 정상적으로 초기셋팅할때 확인했는데....

??????????????????????


하................................ 매일 에러와의 사투는 정말
적응이 되질 않는다 ^^;;;

내용을 확인해보면 import가 제대로 되지 않았다는 내용인데...
우선 결론에 대해 얘기하자면 (ES6) module type을 사용할때 import를 사용하게되면 경로(path)에 대한 '명확'하게 '명시'되어야 한다는 점이다.

문제에 대한 해결을 위해 혼자 공부하는 나로서는 매몰되어있는 이 문제를 해결하는데에 chatGPT가 한몫한다..

에러의 근본적인 문제는 이거였다.

Node.js에서 ES Modules를 사용할 때, 모듈을 불러올 때는 파일 확장자 .js를 명시해야 합니다.
ES Modules를 사용하면서 상대 경로로 다른 모듈을 가져올 때 Node.js는 .js 확장자를
필요로 하기 때문입니다.
이것은 Node.js에서 모듈 시스템이 CommonJS와 ES Modules를 혼용하는 경우에 발생하는
차이점 중 하나입니다.

따라서 import userRouter from "./userRouter.js";와 같이 .js 확장자를 명시해주어야
Node.js가 해당 모듈을 올바르게 불러올 수 있습니다.

하지만 최근 버전의 Node.js는 확장자를 자동으로 추론하여 .js 확장자를 생략하는 경우도 있습니다.
따라서 현재 Node.js 환경에 따라 .js 확장자를 생략하여도 동작할 수 있습니다. 
하지만 확실하게 모듈을 불러오기 위해 확장자를 명시하는 것이 좋습니다.

ESmodule을 사용하면 NodeJS를 사용하는데 세심하지 못한 상황에 대한 에러를 많이 만난다.

물론 이런 내용에 대해서 나도 사전에 숙지하고 이런 문제가 일어나지 않도록 사전에 빌드를 잘 시켜야겠지...

결국 요지Node.js에서 ES Modules를 사용할 때, 모듈을 불러올 때는 파일 확장자 .js를 명시해야 한다다. ES Modules를 사용하면서 상대 경로로 다른 모듈을 가져올 때 Node.js는 .js 확장자를 필요로 하기 때문이다.
NodeJS에서 ESmodule을 설계할때는 경로에 대한 명시성으로 각각 모듈을 활용할 수 있게 해놓았기 때문에 이점을 꼭 챙겨서 코딩을 해야했다.

보이는가 저 터미널의 아래 부분에 성공적으로 연결됨을 ㅠㅠㅠㅠㅠ
감격의 순간이다...
이제 다음 에러를 만나러 가보자ㅏㅏㅏㅏㅏㅏㅏㅏ

profile
beckend developer

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

가치 있는 정보 공유해주셔서 감사합니다.

답글 달기