如何在ES6中导出导入的对象?

用例很简单:我只想导出一个名称与导入名称相同的对象。

例如:

import React from 'react';
export React;

但这并不奏效。我必须这样写:

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

但这很奇怪。正确的做法是什么?

更新:

谢谢你的帮助和推荐。我用许多线索解决了我的问题。我想分享一些常见的案例和解决方法。

出口进口

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 '...';
84209 次浏览

你应该能够执行export {React}并通过import {React} from ./module导入它

更多信息请参见https://developer.mozilla.org/en/docs/web/javascript/reference/statements/export

鉴于./foo.js:

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


export default Foo;

那么你应该可以这样做:

import Foo from './foo';


let foo = new Foo();


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

语法或多或少遵循commonjs模块。导出模式,你可以这样做:

const Foo = class {


};


module.exports = Foo;

更多:

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

我经常在index.js文件中执行以下操作:

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

博客条目提供了一些很好的附加示例。

重要提示

在访问这些导出的导入时,应该注意eslint-rule。基本上,在另一个文件中,你不应该:

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

你应该这样做:

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

您可以用这样的结构导出导入的文件

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

对于我的用例,我显式地需要某种显式的import语句,以便babel可以将我的es7代码编译为es5。

下面将导致错误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'

我的解决方案是使用require()显式导入模块:

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