2016-02-27 4 views
34

Я хотел бы следующее, но с одной строки, если это возможно:ES6, как вы можете экспортировать импортированный модуль в одну строку?

  • import Module from './Module/Module;
  • export Module;

Я попытался следующие, но это не похоже на работу:

  • export Module from './Module/Module;
+0

Смотрите также [Есть любой однострочный аналог в ES6 для ES5 'module.exports = require ('./inner.js')'?] (http://stackoverflow.com/q/32229947/1048572) и [Is 'export {foo as default} 'valid ES6?] (http://stackoverflow.com/q/33155785/1048572) – Bergi

ответ

61
export {default as Module} from './Module/Module'; 

является стандартным способом ES6, если вам не нужен Module, который также будет доступен внутри модуля, выполняющего экспорт.

export Module from './Module/Module; 

является предлагаемым способом ESnext для этого, но это работает только если вы включили его в Babel.

+0

I t работал отлично, однако, похоже, что Webpack этого не нравится, сообщая, что «компонент» теперь доступен только для чтения и не может быть перезагружен. Очень странно! – Detuned

+0

отлично, это должен быть принятый ответ. (если в webpack горячей перезагрузке не нравится, что это проблема в этом инструменте или это плагин HMR.) – Benja

+6

Если кто-то задается вопросом, какой плагин babel он есть, то здесь 'export-extensions' - http://babeljs.io/docs/plugins/transform-export-extensions/ – Noitidart

2

Итак, я нашел, что это работает очень хорошо для непосредственной функциональности экспорта, имеющего index.js в корне каталога components для простого сравнения:

import Component from './Component/Component' 
import ComponentTwo from './ComponentTwo/ComponentTwo' 

module.exports = { 
    Component, 
    ComponentTwo 
}; 

Вы должны использовать module.exports.

+3

Имейте в виду, что, поскольку это частично модули CommonJS, это будет работать только в Babel и не удастся, если вы попытаетесь использовать его в реальном модуле ES6 после того, как поддержка для них приземлится в других средах , и, вероятно, перестанет работать в будущих версиях Babel. – loganfsmyth

+0

Правильно. Перемешивание commonJS & es6 импорта/экспорта в Babel 6 разрывов. Babel5 разрешил/усилил это неправильное поведение. В вашем примере «Компонент» больше не будет ссылкой на ваш экспортированный компонент, но вместо этого будет объектом, ссылка на экземпляр которого находится на 'Component.default' –

+0

Кто-нибудь знает, как это сделать, не используя' module.exports' ? Мне нравится этот метод упаковки кучи компонентов в 'index.js', но не могу понять синтаксис. 'import x from 'x'; импортировать y из 'y'; export default {x, y}; 'then' import {x} из xy; 'не работает (и я не могу понять, почему нет) –

2

Я не знаю, почему, но именно это работает для меня:

index.jsx:

import Component from './Component'; 
import Component2 from './Component2'; 
import Component3 from './Component3'; 
import Component4 from './Component4'; 

export {Component, Component2, Component3, Component4}; 

импортировать экспорт, как это:

import {Component, Component2, Component3, Component4} from '../componets/index'; 
Смежные вопросы