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

Posted

技术标签:

【中文标题】如何在 ES6 中导出导入的对象?【英文标题】:How to export imported object in ES6? 【发布时间】:2016-09-09 01:33:36 【问题描述】:

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

例如:

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 '...';

【问题讨论】:

为什么要导出react? 你可以export React 但同样,如果你在某个地方需要 React,你应该把它导入那里。 export react 只是一个例子,实际上我想组织一些项目,以便用户可以在更短和更高级别的路径中导入一些对象。 export * as name1 from '...'; 这对我不起作用(使用 webpack 2)。有什么想法吗? 有人有export * as name1 from '...'; 的解决方法吗? 【参考方案1】:

您应该可以使用export React 并通过import React from ./module 导入

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

【讨论】:

问题不是这个。【参考方案2】:

给定./foo.js

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

export default Foo;

那么你应该可以做到这一点:

import Foo from './foo';

let foo = new Foo();

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

语法或多或少遵循 commonjs module.exports 模式,你可以这样做:

const Foo = class 

;

module.exports = Foo;

更多:

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

【讨论】:

这不是问题所在?【参考方案3】:

我经常在组成多个文件的 index.js 文件中执行以下操作:

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

blog entry 提供了一些不错的附加示例。

重要提示

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

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

你应该这样做:

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

【讨论】:

【参考方案4】:

您可以导出具有这种结构的导入文件

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

【讨论】:

【参考方案5】:

对于我的用例,我明确需要某种明确的 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;

【讨论】:

以上是关于如何在 ES6 中导出导入的对象?的主要内容,如果未能解决你的问题,请参考以下文章

ES6,如何在一行中导出导入的模块?

ES6 在索引文件中导出/导入

如何要求在 ES6 模块中导出的常量?

怎样在arcgis中导出表格

如何在 Chrome中导出导入书签和密码

如何在 tf2 中导出、导入和运行自定义模型?