Le cas d’utilisation est simple: je veux juste exporter un object avec le nom tel qu’il a été importé.
par exemple:
import React from 'react'; export React;
mais cela ne fonctionne pas. Je dois ecrire:
import React from 'react'; export const React = React;
Mais c’est étrange. Quel est le bon moyen de le faire?
Mis à jour :
Merci pour l’aide et les références. J’ai résolu mon problème avec de nombreux indices. Je voudrais partager quelques cas communs pour moi et les solutions.
import d, {obj} from '...'; export {obj, d}; export {obj as name1, d as name2};
export * from '...'; export * as name1 from '...';
export {a, b as name1} from '...';
export {default} from '...';
export {default as name1} from '...';
Je fais souvent ce qui suit dans les fichiers index.js qui composent plusieurs fichiers:
export {default as SomeClass} from './SomeClass'; export {someFunction} from './utils'; export {default as React} from 'react';
Cette entrée de blog fournit quelques bons exemples supplémentaires.
Vous devez être conscient de cette règle d’eslint lorsque vous accédez à ces importations exscopes. En gros, dans un autre fichier, vous ne devriez pas:
import SomeClassModule from 'SomeClass/index.js'; SomeClassModule.someFunction(); // Oops, error
Vous devriez faire ceci:
import SomeClassModule, {someFunction} from 'SomeClass/index.js'; someFunction(); // Ok
Vous pouvez exporter un fichier importé avec une telle structure
import First from './First' import Second from './Second' /..../ export { First, Second }
Vous devriez pouvoir export {React}
et l’importer via import {React} from ./module
Voir https://developer.mozilla.org/en/docs/web/javascript/reference/statements/export pour plus d’informations.
Étant donné ./foo.js
:
const Foo = class { talk() { return 'hello'; } }; export default Foo;
Ensuite, vous devriez être capable de faire ceci:
import Foo from './foo'; let foo = new Foo(); foo.talk(); // => 'hello';
La syntaxe suit plus ou moins le modèle commonjs module.exports, où vous feriez ceci:
const Foo = class { }; module.exports = Foo;
Plus ici:
Pour mon cas d’utilisation, j’ai explicitement besoin d’une sorte de déclaration d’importation explicite pour que babel puisse transposer mon code es7 en es5.
Le résultat suivant se traduit par une erreur You gave us a visitor for the node type "ForAwaitStatement" but it's not a valid type
:
require( 'babel-core/register' ); //transstacks es7 to es5 export {default} from './module_name'
Ma solution consistait à importer explicitement le module en utilisant require()
:
require( 'babel-core/register' ); export default require( './module_name' ).default;