진입점 역할을 하는 '주요 파일’인 auth/index.js을 통해 기능을 외부에 노출시키면 이 패키지를 사용하는 개발자들은 아래와 같은 코드로 해당 기능을 사용할 겁니다.
import {login, logout} from'auth/index.js'
이때 우리가 만든 패키지를 사용하는 외부 개발자가 패키지 안의 파일들을 뒤져 내부 구조를 건드리게 하면 안 됩니다. 그러려면 공개할 것만 auth/index.js에 넣어 내보내기 하고 나머지는 숨기는 게 좋겠죠.
이때 내보낼 기능을 패키지 전반에 분산하여 구현한 후, auth/index.js에서 이 기능들을 가져오고 이를 다시 내보내면 원하는 바를 어느 정도 달성할 수 있습니다.
// 📁 auth/index.js// login과 logout을 가지고 온 후 바로 내보냅니다.import {login, logout} from'./helpers.js';
export {login, logout};
// User를 가져온 후 바로 내보냅니다.importUserfrom'./user.js';
export {User};
...
이제 외부 개발자들은 import {login} from "auth/index.js"로 우리가 만든 패키지를 이용할 수 있습니다.
export ... from ...는 위와 같이 개체를 가지고 온 후 바로 내보낼 때 쓸 수 있는 문법입니다. 아래 예시는 위 예시와 동일하게 동작합니다.
// 📁 auth/index.js// login과 logout을 가지고 온 후 바로 내보냅니다.export {login, logout} from'./helpers.js';
// User 가져온 후 바로 내보냅니다.export {defaultasUser} from'./user.js';
...
default export 다시 내보내기
기본 내보내기를 다시 내보낼 때는 주의해야 할 점들이 있습니다. user.js 내의 클래스 User를 다시 내보내기 한다고 가정해 봅시다.
// 📁 user.jsexportdefaultclassUser {
// ...
}
User를 export User from './user.js'로 다시 내보내기 할 때 문법 에러가 발생합니다. 어디가 잘못된 걸까요? default export를 다시 내보내려면 위 예시처럼 export {default as User}를 사용해야 합니다.
export * from './user.js'를 사용해 모든 걸 한 번에 다시 내보내면 default export는 무시되고, named export만 다시 내보내집니다. 두 가지를 동시에 다시 내보내고 싶다면 두 문을 동시에 사용해야 합니다.
export * from'./user.js'; // named export를 다시 내보내기export {default} from'./user.js'; // default export를 다시 내보내기
default export를 다시 내보낼 땐 이런 특이한 상황도 인지하고 있다가 처리해줘야 하므로 몇몇 개발자들은 default export를 다시 내보내는것을 선호하지 않습니다.