Как экспортировать модули по умолчанию в barrels index.js

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

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

/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, т.е. import Hellos from './hellos/component/Hellos' но я считаю это плохой практикой и только хочу использовать import Hellos from '/hellos',

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

3 ответа

Решение

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

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

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

Для полноты картины также можно сначала импортировать их, а затем экспортировать под импортированным именем:

      import Something from "./somewhere/whatever";

export { Something };

Для тех, кто использует Babel

Используйте плагин babel-plugin-transform-export-extensions, например, в вашем .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';

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

Другие вопросы по тегам