2016-12-22 8 views
2

Я пытаюсь экспортировать модули по умолчанию с помощью index.js barrels, но, похоже, не может заставить его работать. Он отлично работает с указанным экспортом, но не по умолчанию.Как экспортировать модули по умолчанию в index.js barrels

Упрощенная структура проекта

/hellos 
    /components 
    Hello.js 
    Hellos.js 
    index.js 
    index.js 
App.js 

/hellos/component/Hellos.js

... 
export default Hellos 

/hellos/component/index.js

export * from './Hello'; 
export * from './Hellos'; 

/hellos/index.js

export * from './components' 
export * from './actions' 
export * from './constants' 
export * from './reducers' 

App.js

import Hellos from './hellos' 
console.log(Hellos) // <- undefined 

Модуль Hellos импортирован чуть выше, всегда не определено.

Я могу заставить его работать, используя либо именованный экспорт, либо прямой импорт в App.js i.e. import Hellos from './hellos/component/Hellos', но я считаю эту плохую практику и хочу использовать только import Hellos from '/hellos'.

Я подозреваю, что проблема связана с бочками index.js, но я не могу это решить. Пожалуйста помоги.

+3

Я думаю, что вы хотите что-то вроде 'export {default as Hello} из './Hello';' в вашем индексном файле компонента. – tengbretson

+0

Да, это проблема. Спасибо –

+0

Чтобы автоматизировать создание index.js, вы можете использовать https://github.com/gajus/create-index – weivall

ответ

3

Используйте следующую строку:

export { default as MyModule } from 'src/MyModule' 

Надеется, что это соответствует вашим потребностям, веселит

0

Для тех, кто использует столпотворение

Используйте столпотворение-плагин-преобразующий-экспорт-расширения плагиных как это в вашем .babelrc:

"plugins": [ 
    "babel-plugin-transform-export-extensions", 
    "transform-es2015-modules-commonjs" 
    ] 

А затем установить плагин, как это:

npm install --save-dev babel-plugin-transform-export-extensions 
npm install --save-dev babel-plugin-transform-es2015-modules-commonjs 

Тогда и можно использовать экспорт в index.js просто так:

export simple from './simple'; 
export restClient from './jsonServer'; 
export * from './types'; 

Для тех, кто использует более ранние версии Бабель, просто использовать CommonJS модуль.