작성자 : 배광식
검수자 : 장기효, 배광식
Import, Export
module
- 애플리케이션을 구성하는 개별적 요소
- 캡슐화하고 필요한 API를 외부에 노출 (재사용 가능)
export - 다른 코드에서 로드하여 사용
import - 개발효율성, 유지보수성 향상
ES6 이전 client-side 자바스크립트
- 파일마다 독립적인 scope를 갖지 않고 하나의 전역 객체에 바인딩
- 전역변수의 중복 등 문제가 발생
export
- 모듈은 기본적으로 해당 모듈 내부에서만 참조할 수 있기 때문에 export를 이용해서 외부에서 사용
var, let, const, function, class export가능
// utils1.js
export const name = 'jimmy';
export function sum(x, y) {
return x + y;
}
export class Circle {
constructor(radius) {
this.radius = radius;
}
}
객체로 구성하여 export
// utils2.js
const name = 'jimmy';
function sum(x, y) {
return x + y;
}
class Circle {
constructor(radius) {
this.radius = radius;
}
}
export { name, sum, Circle };
import
중괄호 {}를 사용하여 모듈을 import
- export, import의 모듈명이 같아야 한다.
// index1.js
import { name, sum, Circle } from './utils1';
console.log(name); // jimmy
console.log(sum(1, 2)); // 3
console.log(new Circle(10)); // Circle { radius: 10 }
이름 변경 (별칭 사용)
// index2.js
import { name as NM, sum as SM, Circle as CI } from './utils2';
console.log(NM); // jimmy
console.log(SM(1, 2)); // 3
console.log(new CI(10)); // Circle { radius: 10 }
export default
- 하나의 export default만 사용가능, 함수명은 생략가능
- export와 다른점은 import때
{ }를 쓰지 않고 모듈명을 임의로 지정할 수 있음 - var, let, const 변수는 사용 X
// utils3.js
export function sum(x, y) {
return x + y;
}
export default function(x, y) {
return x + y;
}
임의의 이름으로 import
// index3.js
import isum from './utils3' // export default
import { sum } from './utils3' // export
console.log(isum(1, 2)); // 3
console.log(sum(1, 4)); // 5
babel
ES6 -> ES5 이하의 버전으로 트랜스파일링
package.json 파일 생성
로컬에 babel cli 설치
로컬에 babel env preset 설치 (여러 플러그인이나 설정을 미리 설정)
$ npm init -y (--yes: 디폴트 설정으로 package.json파일 생성)
$ npm i babel-cli --save-dev
$ npm i babel-preset-env --save-dev
.babelrc.json파일 생성
{
"presets": ["env"]
}
package.jsonscript add
{
......
"scripts": {
......
"build": "babel . --ignore ./node_modules -d ./dist"
}
......
}
- 실행
$ npm run build