Come esportare oggetti importati in ES6?


244

Il caso d'uso è semplice: voglio solo esportare un oggetto con il nome così come è stato importato.

per esempio:

import React from 'react';
export React;

Ma questo non funziona. Devo scrivere:

import React from 'react';
export const React = React;

Ma questo è strano. Qual è il modo giusto per farlo?

AGGIORNATO :

Grazie per aiuto e referenze. Ho risolto il mio problema con molti indizi. Vorrei condividere alcuni casi comuni per me e le soluzioni.

importazioni all'esportazione

import d, {obj} from '...';

export {obj, d};
export {obj as name1, d as name2};

riesportare tutte le importazioni denominate

export * from '...';
export * as name1 from '...';

riesportare alcune importazioni denominate

export {a, b as name1} from '...';

riesportare l'importazione predefinita come esportazione predefinita

export {default} from '...';

riesportare l'importazione predefinita come esportazione denominata

export {default as name1} from '...';

perché dovresti esportare reagire?
omarjmh,

puoi, export {React}ma ancora una volta, se hai bisogno di React da qualche parte, dovresti semplicemente importarlo lì.
loganfsmyth,

2
Export React è solo un esempio, infatti, voglio organizzare alcuni progetti in modo che l'utente possa importare alcuni oggetti in percorsi più brevi e di alto livello.
Yao Zhao,

Grazie mille per questo aggiornamento. Ha risolto tutti i problemi che ho avuto con ES6 / 7. Ti suggerisco di aggiungere questo come risposta e accettarlo.
Florian Wendelborn,

12
export * as name1 from '...';questo non funziona per me (usando webpack 2). Qualche idea?
Entity Black

Risposte:


131

Faccio spesso quanto segue nei file index.js che compongono diversi file:

export {default as SomeClass} from './SomeClass';
export {someFunction} from './utils';
export {default as React} from 'react';

Questo post sul blog fornisce alcuni esempi aggiuntivi.

Nota importante

È necessario essere consapevoli di questa regola eslint quando si accede a queste importazioni esportate. Fondamentalmente, in un altro file, non dovresti:

import SomeClassModule from 'SomeClass/index.js';
SomeClassModule.someFunction(); // Oops, error

Dovresti fare questo:

import SomeClassModule, {someFunction} from 'SomeClass/index.js';
someFunction(); // Ok

36

È possibile esportare file importati con tale struttura

import First from './First'
import Second from './Second'
/..../
export { First, Second }

2

Per il mio caso d'uso, ho esplicitamente bisogno di una sorta di dichiarazione esplicita di importazione in modo che babel possa trascrivere il mio codice es7 in es5.

Di seguito viene generato un errore You gave us a visitor for the node type "ForAwaitStatement" but it's not a valid type:

require( 'babel-core/register' ); //transpiles es7 to es5
export {default} from './module_name'

La mia soluzione era importare esplicitamente il modulo usando require():

require( 'babel-core/register' );
export default require( './module_name' ).default;

-1

Dato ./foo.js:

const Foo = class {
  talk() { return 'hello'; }
};

export default Foo;

Quindi dovresti essere in grado di fare questo:

import Foo from './foo';

let foo = new Foo();

foo.talk(); // => 'hello';

La sintassi segue più o meno il modello commonjs module.exports, dove si farebbe questo:

const Foo = class {

};

module.exports = Foo;

Più qui:

http://exploringjs.com/es6/ch_modules.html


Non è proprio di questo che si trattava?
Dan Dascalescu,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.