getInitialHTML을 꼭 빌드된 dist 디렉토리 내 파일에서 import하는 이유가 있나요??
routes.js에서 export된 getInitialHTML을 server.js에서 import 해오면 될 것같은데, dist에서 import해 오시는 이유가 궁금합니다.
빌드 이후 운영시점에는 server.js에서 개발디렉토리인 src가 아닌 dist를 참조하게 하려는 이유같은데 그것이 맞을까요?
Answer 2
0
안녕하세요. 좋은 질문 감사합니다!
일단 이 코드를
import { getInitialHTML } from './dist/index.js';이렇게 바꾸고 실행해보시면
import { getInitialHTML } from './main.js';이런 에러를 만나실 거에요.
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/Users/eunjae/workspace/sinabro-js/ep07/src/router' imported from /Users/eunjae/workspace/sinabro-js/ep07/main.js
Did you mean to import ../src/router.js?
저게 왜 그러냐면, main.js 에
import { start } from './src/router';이런 코드가 있는데, router.js 대신 그냥 router 라고만 썼더니, node.js 가 router 라는 걸 못 찾겠는데? 하면서 에러를 내는 거에요. 사실 원래는 확장자까지 정확히 써주는 게 ESM 스펙 상 맞아요. 그런데 우리는 그간 저렇게 잘 써왔잖아요? 이건 우리가 vite 이라는 번들러를 사용했더니 번들러가 처리를 해줬던 일 중 하나에요.
번들러가 편하고 좋긴 하지만, 원래 어디까지가 기본 표준이고, 어디부터가 번들러가 제공해주는 건지.. 경계를 명확히 이해하고 쓰기가 쉽지 않아서 이런 혼란도 겪게 되죠. 아무튼 저런 이슈가 있는데, 사실 이 예제 같은 경우에는 import 구문에 .js 를 다 붙여주기만 하면 잘 작동해요. 별 문제는 없습니다.
... 하지만, 확실히 번들러가 좋기는 좋은 게, 저렇게 빌드한 걸 import 하는 방식을 취하게 된다면 다음과 같은 이점은 있어요.
서버에서 사용하려는 node.js 버전이 낮은 경우, 그에 맞게 transpile 된 코드를 사용할 수 있게 됩니다 (너무 최신 문법 대신 하위 호환 되는 버전으로 빌드 된다던지)
프론트엔드 코드를 타입스크립트로 작성했다던가 하면 node.js 에서 직접적으로 import 를 할 수 없겠죠. (그래서 역시 js 로 transpile 된 버전이 필요합니다)
일단 당장 생각나는 건 이 정도네요. 또 궁금한 게 있으시면 알려주세요!
3강 질문
0
15
1
74. 데이터 캐시 - 1 (이론) 강의 영상 누락
0
26
1
2강 nodejs 3단계 설명 질문
0
33
1
imagesLoaded에 관한 질문
0
19
2
useEffect와 lifecycle문의
0
26
2
프론트엔드 학습 수준 문의
0
37
2
리액트 챕터별 코드에서 eslint 설정파일이 없어요
0
47
2
최근 코테, 과제 테스트 트렌드
0
67
2
lucide react 아이콘 설치
0
46
2
17강 zustand store 서버에서 생성
1
36
1
문의관련 문의
0
44
2
깃헙 초대 관련
0
62
2
virtual dom과 관련된 인식 피드백
0
67
1
번들러를 꼭 사용해야하나요?
3
621
1
filter test 마지막 문제 결과값이 이상합니다.
2
348
1
reactivity.js 를 proxy로 수정 후 오류
0
517
2
첫 강의 배포 & 번들러의 기초에 대한 제 이해가 맞는지 궁금합니다
1
522
1
클로저에 대해서 제가 아는 부분을 공유합니다!
1
655
1
yarn dev 안되요..
1
564
1
yearn create 1분정도
1
330
1
콘솔창 $0과 this에 대해
0
684
1
소스파일
0
673
2
백틱 치환 기능이 궁금합니다.
0
545
1
쇼핑물 api 입니다.
4
809
1

