색인 파일에서 ES6 내보내기 / 가져 오기


201

현재 webpack / babel을 통해 React 앱에서 ES6을 사용하고 있습니다. 색인 파일을 사용하여 모듈의 모든 구성 요소를 수집하고 내보내고 있습니다. 불행히도 다음과 같습니다.

import Comp1_ from './Comp1.jsx';
import Comp2_ from './Comp2.jsx';
import Comp3_ from './Comp3.jsx';

export const Comp1 = Comp1_;
export const Comp2 = Comp2_;
export const Comp3 = Comp3_;

따라서 다음과 같은 다른 위치에서 멋지게 가져올 수 있습니다.

import { Comp1, Comp2, Comp3 } from './components';

분명히 그것은 좋은 해결책이 아니므로 다른 방법이 있는지 궁금합니다. 가져온 구성 요소를 직접 내보낼 수없는 것 같습니다.


답변:


369

기본 가져 오기를 쉽게 다시 내보낼 수 있습니다.

export {default as Comp1} from './Comp1.jsx';
export {default as Comp2} from './Comp2.jsx';
export {default as Comp3} from './Comp3.jsx';

ES7 ES8에 대한 제안 도 있습니다 export Comp1 from '…';.



6
ES8 제안서 외에도 코드 생성을 사용하여 색인 파일을 유지할 수 있습니다. github.com/gajus/create-indexgithub.com/ryardley/indexr를 살펴보십시오 .
Gajus

@Bergi이 3 줄은 가져 오기와 내보내기를 모두 수행합니까? 아니면 그냥 내보내는 것이지만 더 이상 Comp1_ 이름 등으로 바이올린을 칠 필요가 없습니까?
musicformellons

@musicformellons 예를 들어 참조 된 모듈에서 직접 내 보냅니다.
Bergi

2
@amann 자체의 순환 참조는 나쁘지는 않지만 모듈의 기능에 따라 문제가 발생할 수 있습니다 . 어쨌든 라이브러리의 색인 파일에서만이 패턴을 사용하여 모든 구성 요소를 내 보내야하며 모듈 간 종속성이있는 경우 큰 부분에서 부품을 가져 오는 대신 직접 가져와야합니다. 이를 통해이 패턴에 의해 순환 참조가 도입되지 않습니다.
Bergi

56

또한 여러 기능을 한 번에 내 보내야하는 경우 작업과 같이 사용할 수 있습니다.

export * from './XThingActions';

14
예. 불행히도 이것은 이름 지정된 내보내기 만을 취합니다. 즉 기본 내보내기를 포함하지 않습니다.
ArneHugo

(... 꽤 오해의 소지가 나에게 순간을했다) 나에게의를 얻을 수 SyntaxError: Unexpected reserved wordBERGI의 허용 대답이 작업을 수행 @,.
Frank Nocke

이 문제를 해결하기 위해 기본 내보내기의 이름을 지정할 수도 있습니다. 또한 액션에 기본 내보내기가 없어야이 솔루션이 제대로 작동합니다.
Barry Michael Doyle

2
모범 사례는 자바 스크립트에서 기본 내보내기를 사용하지 않고 불필요한 추가 구문을 사용하는 것입니다. @GM은 현대 자바 스크립트에 대한이 스레드에서 가장 좋은 답변을 제공합니다.
mibbit

39

너무 늦었지만 해결 방법을 공유하고 싶습니다.

갖는 model두 개의 명명 수출이 있습니다 파일 :

export { Schema, Model };

와 가진 controller기본 수출이 파일을 :

export default Controller;

index이 방법으로 파일에 노출했습니다 .

import { Schema, Model } from './model';
import Controller from './controller';

export { Schema, Model, Controller };

그리고 내가 그들 모두를 가져오고 싶다고 가정하면 :

import { Schema, Model, Controller } from '../../path/';

함수를 가져온 다음 다시 내보낼 때 작동합니까? 나는 시도했지만 그것을하지 않았다.
Aftab Naveed

실제로 작동하지 않아 죄송합니다 ./ 경로에 없습니다.
Aftab Naveed

14

간단히:

// Default export (recommended)
export {default} from './MyClass' 

// Default export with alias
export {default as d1} from './MyClass' 

// In >ES7, it could be
export * from './MyClass'

// In >ES7, with alias
export * as d1 from './MyClass'

또는 함수 이름으로 :

// export by function names
export { funcName1, funcName2, …} from './MyClass'

// export by aliases
export { funcName1 as f1, funcName2 as f2, …} from './MyClass'

추가 정보 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export


1

다음을 @babel/plugin-proposal-export-default-from통해 설치하십시오 .

yarn add -D @babel/plugin-proposal-export-default-from

귀하 .babelrc.json또는 모든 구성 파일 유형

module.exports = {
  //...
  plugins: [
     '@babel/plugin-proposal-export-default-from'
  ]
  //...
}

이제 다음 export에서 직접 할 수 있습니다 file-path.

export Foo from './components/Foo'
export Bar from './components/Bar'

행운을 빕니다...


꺼내지 않고 Create-React-App에 어떻게합니까?
Negin Basiri
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.