JavaScript

[새로운 기능] module 시스템

  • -

기존의 javascript에서는 <script src=""> 형태로 파일 단위로만 스크립트들을 재사용할 수 있었다. 특히 <script>는 html에서 사용하는 태그로 하나의 javascript에서 다른 javascript를 사용할 수가 없었다. es2015에서는 module의 개념이 도입되면서 이런 부분이 개선되었다.

  일반 스크립트(<script src="">) 모듈 스크립트(<script type="module">)
스코프 전역 스코프에서 실행되므로 충돌 가능
 - 스크립트의 모든 변수/함수는 window의 속성
모듈을 import한 script에서만 사용 가능
로딩 기본적으로 스크립트가 로딩될 때까지 html 파싱이 멈춤(동기)
 - defer: 스크립트를 비동기로 다운로드 하고 html 파싱 완료 후 스크립트 실행
 - async: 스크립트를 비동기로 다운로드 하고 다운로드 완료 후 즉시 실행
비동기적으로 로딩
 - 기본적으로 defer

 

module에서는 공유 대상을 제공하는 export와 활용하는 import가 사용된다.

항목을 공유하기 위해서는 export를 사용한다. 다음과 같이 multi_export.js를 작성할 수 있다.

// 선언과 동시에 export export let name = '홍길동'; export function add(a, b) { return a + b; } // 선언과 별개로 export let addr = "seoul"; let age = 30; export { addr, age };

위의 javascript는 name, add, addr, age라는 4가지를 export 하고 있다. 

한 가지 항목만을 export 할 때에는 export default를 사용한다. 다음과 같이 default_export.js를 작성할 수 있다.

export default { sayHello : { kor(name) { console.log(`안녕 ${name}`); }, eng(name) { console.log(`Hello ${name}`); } } }

 

export 한 내용을 가져다 쓰기 위해서는 import 명령을 사용한다. 아래와 같이 import_test.js를 작성할 수 있다.

import { name, add, addr as myaddr, // 다른 이름으로 변경 가능 age } from "./multi_export.js"; import greeting from "./default_export.js"; console.log(name, myaddr, age); console.log(add(10, 20)); greeting.sayHello.kor("홍길동"); export {name, myaddr, age, greeting}

첫 번째 import 문장에서는 {} 가 사용되었는데 de-structuring 처럼 multi_export.js에서 export 한 내용 중 필요한 내용을 선언해 주면 된다. 만약 이름을 달리 사용하려는 경우는 as 키워드로 이름을 지정할 수 있다.

두 번째 import 문장은 어차피 하나만 export되기 때문에 하나의 변수로 받아서 처리하고 있다.

이로써 javascript 파일에서 다른 javascript를 가져다 사용할 수 있게 되었다.

 

export 한 내용을 html에서 사용하기 위해서는 <script>태그에 type=module 속성을 추가해주어야 한다.

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title> </head> <body></body> <script type="module"> import { name, greeting } from "./import_test.js"; console.log(name); greeting.sayHello.eng("hong"); </script> </html>

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.