Как экспортировать модули по умолчанию в 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.