getInitialHTML을 꼭 빌드된 dist 디렉토리 내 파일에서 import하는 이유가 있나요??
routes.js에서 export된 getInitialHTML을 server.js에서 import 해오면 될 것같은데, dist에서 import해 오시는 이유가 궁금합니다.
빌드 이후 운영시점에는 server.js에서 개발디렉토리인 src가 아닌 dist를 참조하게 하려는 이유같은데 그것이 맞을까요?
답변 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 된 버전이 필요합니다)
일단 당장 생각나는 건 이 정도네요. 또 궁금한 게 있으시면 알려주세요!
10월 15일 삭제예정 강의 문의
0
20
1
강의제목에 10/15일 삭제라고 나와있는데,
0
46
1
스크립트 영상 미일치
0
71
3
감정일기장 다이어리 필터 적용할때 컨텍스트를 Home에서 가져오는 특별한 이유가 궁금합니다.
0
53
2
강의 설명 중에 헷갈리는 것이 있네요
0
49
1
수업자료 관련 문의
0
65
3
1강 동영상 재생 오류
1
66
2
Composition단계에서 `Layer`는 누가 만드는지
0
41
1
Strict Mode 예시 질문!
0
58
2
수업이 안보여요
0
62
1
저자 블로그에 있는 강의는 어떤 강의인가요?
1
60
1
깃헙 초대 관련
0
113
2
virtual dom과 관련된 인식 피드백
0
105
1
번들러를 꼭 사용해야하나요?
3
687
1
filter test 마지막 문제 결과값이 이상합니다.
2
389
1
reactivity.js 를 proxy로 수정 후 오류
0
560
2
첫 강의 배포 & 번들러의 기초에 대한 제 이해가 맞는지 궁금합니다
1
566
1
클로저에 대해서 제가 아는 부분을 공유합니다!
1
693
1
yarn dev 안되요..
1
591
1
yearn create 1분정도
1
370
1
콘솔창 $0과 this에 대해
0
717
1
소스파일
0
712
2
백틱 치환 기능이 궁금합니다.
0
589
1
쇼핑물 api 입니다.
4
840
1





