2016-02-27 10 views
34

Mi piacerebbe seguente, ma con una sola riga, se possibile:ES6, come è possibile esportare un modulo importato in una singola riga?

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

Ho provato quanto segue ma non sembra funzionare:

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

Vedi anche [C'è qualsiasi analogico a una riga in ES6 per ES5 'module.exports = require ('./inner.js')'?] (http://stackoverflow.com/q/32229947/1048572) e [Esporta '{foo as default} 'valido ES6?] (http://stackoverflow.com/q/33155785/1048572) – Bergi

risposta

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

è il modo standard ES6, purché non sia necessario che Module sia disponibile all'interno del modulo eseguendo l'esportazione.

export Module from './Module/Module; 

è un modo ESnext proposto di farlo, ma che funziona solo se hai attivato in Babel per ora.

+0

I Ho lavorato alla grande, tuttavia, sembra che a Webpack non piaccia questo, dando una notifica che il 'componente' è ora di sola lettura e non può essere ricaricato a caldo. Molto strano! – Detuned

+0

perfetto, questa dovrebbe essere la risposta accettata. (se il webpack hot reload non mi piace è un problema in quello strumento o è il plugin HMR.) – Benja

+6

Se qualcuno si chiede quale plugin babel sia, è 'export-extensions' qui - http://babeljs.io/docs/plugins/transform-export-extensions/ – Noitidart

2

Così, ho trovato questo per funzionare abbastanza bene per la funzionalità di esportazione immediata di avere un index.js alla radice della directory components per un facile riferimento:

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

module.exports = { 
    Component, 
    ComponentTwo 
}; 

è necessario utilizzare module.exports.

+3

Ricorda che poiché si tratta di moduli parzialmente CommonJS, questo funzionerà solo in modo specifico in Babel e non funzionerà se tenterai di utilizzarlo in un vero modulo ES6 una volta che il supporto per loro sarà disponibile in più ambienti e probabilmente smetterà di funzionare nelle versioni future di Babel. – loganfsmyth

+0

corretto. Interlingling commonJS ed es6 importazione/esportazione in Babel 6 pause. Babel5 ha permesso/rinforzato questo comportamento scorretto. Nell'esempio, 'Component' non sarà più un riferimento al componente esportato, ma invece sarà un oggetto, con il riferimento di istanza che vive su' Component.default' –

+0

Qualcuno sa come fare senza usare 'module.exports' ? Mi piace questo metodo di impacchettare un gruppo di componenti in un 'index.js', ma non riesco a capire la sintassi. 'importa x da 'x'; importa y da 'y'; export default {x, y}; 'quindi' importa {x} da xy; 'non funziona (e non riesco a capire perché no) –

2

Non so perché, ma solo questo funziona per me:

index.jsx:

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

export {Component, Component2, Component3, Component4}; 

ho importare le esportazioni in questo modo:

import {Component, Component2, Component3, Component4} from '../componets/index';