Le cas d'utilisation est simple: je veux juste exporter un objet avec le nom tel qu'il a été importé.
par exemple:
import React from 'react';
export React;
mais ça ne marche 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 exemples supplémentaires intéressants.
Vous devez savoir que eslint-rule lorsque vous accédez à ces importations exportées. 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 le fichier importé avec une telle structure
import First from './First'
import Second from './Second'
/..../
export { First, Second }
Vous devriez pouvoir faire 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.
Voici comment j'ai organisé mes fichiers d’image statiques. J'ai créé un nouveau fichier appelé "Directory.js".
const asset = {
icon: {
artist: require('./icon/artist.png'),
artists: require('./icon/artists.png'),
bookmark: require('./icon/bookmark.png'),
cameraFlip: require('./icon/camera-flip.png')
},
image: {
color: require('./image/color.png'),
posting: require('./image/posting.png'),
newSchool: require('./image/new-school.png'),
traditional: require('./image/traditional.png')
}
}
export default asset;
Et voici l'importation.
import asset from './../asset/Directory';
// usage in react native
<Image source={asset.icon.posting} />
J'espère que cela a aidé!
Pour mon cas d'utilisation, j'ai explicitement besoin d'une sorte d'instruction d'importation explicite pour que babel puisse transcrire mon code es7 en es5.
Les résultats suivants entraînent une erreur 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'
Ma solution a été d'importer explicitement le module en utilisant require()
:
require( 'babel-core/register' );
export default require( './module_name' ).default;
./foo.js
:
const Foo = class {
talk() { return 'hello'; }
};
export default Foo;
Alors vous devriez pouvoir 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, dans lequel vous feriez ceci:
const Foo = class {
};
module.exports = Foo;
Plus ici: