inflearn logo
강의

Course

Instructor

JavaScript Little by Little

07. Movie Information Site - (6 of 9) Server-side rendering for index page

getInitialHTML을 꼭 빌드된 dist 디렉토리 내 파일에서 import하는 이유가 있나요??

Resolved

148

hj rr

1 asked

1

routes.js에서 export된 getInitialHTML을 server.js에서 import 해오면 될 것같은데, dist에서 import해 오시는 이유가 궁금합니다.

빌드 이후 운영시점에는 server.js에서 개발디렉토리인 src가 아닌 dist를 참조하게 하려는 이유같은데 그것이 맞을까요?

javascript vanilla-js

Answer 2

0

hj rr

아하 그런 이유가 있었군요. 설명감사합니다.

0

eunjae

안녕하세요. 좋은 질문 감사합니다!

일단 이 코드를

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