在 ES 6 模块中重新导出默认值

Posted

技术标签:

【中文标题】在 ES 6 模块中重新导出默认值【英文标题】:Re-export default in ES 6 modules 【发布时间】:2017-02-21 07:05:46 【问题描述】:

在 ES6 中,是否可以缩短以下代码。我有一个App.js 文件和一个index.js

index.js

import App from './App';

export default App;

类似的东西

index.js

export default App from './App.js'

【问题讨论】:

参考:github.com/tc39/proposal-export-default-from 【参考方案1】:

如果您使用proposal-export-default-from Babel plugin(它是stage-1 preset 的一部分),您将能够使用以下代码重新导出默认值:

export default from "./App.js"

欲了解更多信息,请参阅the ECMAScript proposal。


另一种方式(没有这个插件)是:

export  default as App  from "./App.js"

当单独的文件有自己的export 时,以上是一种非常常见的做法,它们具有所有共同点,例如utils,因此,例如,如果想要导入 3 实用程序函数,而不必编写多个导入

import util_a from 'utils/util_a' 
import util_b from 'utils/util_b' 
import util_c from 'utils/util_c' 

可以在一行中导入任何实用程序:

import  util_a, util_b , util_c  from 'utils' 

通过在/utils 文件夹中创建一个index.js 文件并导入那里所有实用程序的所有默认值并重新导出,因此index 文件将充当与该文件相关的所有导入的“网关”文件夹。

【讨论】:

export default as MyModule from "./my-modue.js"; const oneSmallFunction = MyModule 加倍努力。 @AlanDong 您的建议对我来说似乎是一个非常有效的解决方案。您为什么不将其发布为答案?【参考方案2】:

这与之前的答案有点重复,但要澄清两个选项的区别:

1.默认导出

(这似乎是 OP 想要的)

export  default  from './App'

// in a different file
import App from './index'

2。命名导出

export  default as App  from './App'

// in another file
import  App  from './index'

这些将与 react 作为 vsync 的 answer 状态一起使用。

【讨论】:

【参考方案3】:
import App from './App';

export default App;

Babel 7(带有@babel/preset-react)可以转换以下内容:

export  default as App  from './App.js';

相关讨论:

TC39 提案: https://github.com/tc39/proposal-export-default-from#common-concerns

【讨论】:

【参考方案4】:

唯一可行的解​​决方案是:

import App from './App';

export default App;

如果你像这样导出你的模块

export  default as App  from './App.js';

那么它不再是默认导出,如果您尝试将其导入为默认导入,则会出现错误。

【讨论】:

【参考方案5】:
import App from './App';
export default (App);

这适用于我在默认的“create-react-app”应用程序中

【讨论】:

以上是关于在 ES 6 模块中重新导出默认值的主要内容,如果未能解决你的问题,请参考以下文章

ES6 简介

JavaScript ES6 - 函数扩展

JavaScript ES6 - 函数扩展

JS ES6:声明const并将其导出为默认值与将其直接声明为默认导出之间的区别

使用 babel 和 webpack 转换代码时,导出默认值不会被转换

为啥导出/导入默认 ES 模块属性比命名模块属性更快?