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

169

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 된 버전이 필요합니다)

일단 당장 생각나는 건 이 정도네요. 또 궁금한 게 있으시면 알려주세요!

존재하지 않는 일기 url입력 시 alert이 두 번 떠요

0

19

1

useState 직접 구현 부분에서 질문이 있습니다.

1

26

1

학습을 하고 블로그에 정리를 해도 괜찮을까요?

1

28

1

교재(3쇄)와 강의 내용 문의

0

30

2

섹션2번 부분 강의 화면이 잘 못된것 같아서 문의합니다.

0

23

1

call stack 표현이 잘못표현된것이 아닌가요?

0

66

2

React 와 Virtual DOM 의 이야기 영상 실행이 안됩니다.

0

34

1

일반 강의와 차이점?

1

53

1

!= 연산자의 역할

0

35

1

중요하진 않지만 설명하신부분에서 안된부분..

1

37

1

강의 듣는 순서가 어떻게 되나요?

0

50

1

깃헙 초대 관련

0

71

2

virtual dom과 관련된 인식 피드백

0

77

1

번들러를 꼭 사용해야하나요?

3

643

1

filter test 마지막 문제 결과값이 이상합니다.

2

361

1

reactivity.js 를 proxy로 수정 후 오류

0

525

2

첫 강의 배포 & 번들러의 기초에 대한 제 이해가 맞는지 궁금합니다

1

536

1

클로저에 대해서 제가 아는 부분을 공유합니다!

1

666

1

yarn dev 안되요..

1

569

1

yearn create 1분정도

1

347

1

콘솔창 $0과 this에 대해

0

690

1

소스파일

0

681

2

백틱 치환 기능이 궁금합니다.

0

558

1

쇼핑물 api 입니다.

4

814

1