개발공작소
article thumbnail
728x90
반응형

 

 

 

 

2015년 ES6문법이 도입되면서 javascript에서도 모듈을 가지고 올 수 있는 

import와 export가 생겼다.

 

import를 할 때 아래와 같은 2가지의 방식이 있는데

 

1. import()

2. import ...from

 

이 친구들 똑같이 모듈을 import하지만 작동방식이 다르다. 오늘은 그 작동방식에 대해 정리해보려 한다.(간단히)

 

 

import ...from의 작동방식

 

import하기전에 모듈들을 미리 로드 해놓고 import를 수행함

 

 

import.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script type="module">
      
      import { temp } from "./import.js";
      console.log(temp); //temp입니다.
      
    </script>
  </head>
  <body></body>
</html>

 

 

import.js

const temp = "temp입니다.";

export { temp };

 

 

결과

 

결과를 보면 temp에 모듈에서 export한 temp변수가 제대로 들어온 것을 확인할 수 있다.

 

그리고 눈 여겨봐야 할 점은 좌측의 소스를 보면 import.js를 제대로 로드한 것을 확인 할 수 있다.

 

 

 

import()의 작동방식

 

모듈이 로드되기 전에 import를 수행함

 

 

import.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script type="module">
      
      let { temp } = import("./import.js");
      console.log(temp); //undefined
      
    </script>
  </head>
  <body></body>
</html>

 

 

import.js

const temp = "temp입니다.";

export { temp };

 

 

결과

 

결과는 temp가 undefined이 뜬다.. 왜 그런걸까?

 

여기서 눈 여겨봐야 할 점은 분명 import() 구문을 지나 console.log() 구문까지 왔는데도

import.js가 로드 되지 않은 것을 확인 할 수 있다.

 

 

 

결론

 

 

import ...from은 모듈이 전부 로드 된 후에 import를 수행하기 때문에 await 또는 then 구분을 사용하지 않고도

정상적으로 모듈을 import 해올 수 있지만

 

import()는 모듈이 로드 되기전에 import를 수행하기 때문에 await 또는 then 키워드를 사용하여

import해야 사용자가 원하는 결과값을 얻을 수 있다.

 

* 단 node환경에서 import ...from 또한 소스가 꼬이면(모듈이 initialized 되기전) 정상적으로 import 해올 수 없는 상황이

있기 때문에 그런 경우에는 await import()를 사용하면 문제를 해결할 수 있다.

 

 

 

 

728x90
반응형
profile

개발공작소

@모찌바라기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!