ES6导出/导入索引文件

Moe*_*ler 182 javascript ecmascript-6 webpack babeljs

我目前正在通过webpack/babel在React应用程序中使用ES6.我正在使用索引文件来收集模块的所有组件并将其导出.不幸的是,这看起来像这样:

import Comp1_ from './Comp1.jsx';
import Comp2_ from './Comp2.jsx';
import Comp3_ from './Comp3.jsx';

export const Comp1 = Comp1_;
export const Comp2 = Comp2_;
export const Comp3 = Comp3_;
Run Code Online (Sandbox Code Playgroud)

所以我可以很好地从其他地方导入它,如下所示:

import { Comp1, Comp2, Comp3 } from './components';
Run Code Online (Sandbox Code Playgroud)

显然这不是一个非常好的解决方案,所以我想知道,如果有任何其他方式.我似乎无法直接导出导入的组件.

Ber*_*rgi 334

您可以轻松地重新导出默认导入:

export {default as Comp1} from './Comp1.jsx';
export {default as Comp2} from './Comp2.jsx';
export {default as Comp3} from './Comp3.jsx';
Run Code Online (Sandbox Code Playgroud)

还有一个ES7 ES8建议可以让你写export Comp1 from '…';.

  • 除ES8提议外,您还可以使用代码生成来维护索引文件.看看https://github.com/gajus/create-index和https://github.com/ryardley/indexr. (4认同)
  • 另见类似的模式[这里](http://stackoverflow.com/a/32230064/1048572)和[这里](http://stackoverflow.com/q/29722270/1048572) (2认同)
  • @amann本身的循环引用并不坏,但*可能*会导致问题,具体取决于模块的功能.无论如何,我认为你应该只在库的索引文件中使用这个模式来导出所有组件,如果你有模块间依赖关系,你应该直接导入它们而不是从大文件中导入部分.这样,此模式不会引入循环引用. (2认同)

小智 51

另外,请记住,如果您需要一次导出多个功能,就像您可以使用的操作一样

export * from './XThingActions';
Run Code Online (Sandbox Code Playgroud)

  • 是.不幸的是,这个_only_采用命名导出,即它不包括默认导出. (11认同)
  • 最佳实践是不要在 javascript 中使用默认导出,不必要的额外语法。@GM 在此线程上为现代 javascript 提供了最佳答案。 (4认同)

小智 38

太晚但我想分享我解决它的方式.

拥有model两个名为export的文件:

export { Schema, Model };
Run Code Online (Sandbox Code Playgroud)

并且具有controller默认导出的文件:

export default Controller;
Run Code Online (Sandbox Code Playgroud)

index以这种方式暴露在文件中:

import { Schema, Model } from './model';
import Controller from './controller';

export { Schema, Model, Controller };
Run Code Online (Sandbox Code Playgroud)

并假设我想要导入所有这些:

import { Schema, Model, Controller } from '../../path/';
Run Code Online (Sandbox Code Playgroud)


Rez*_*Moh 13

文件夹结构:

components|
          |_Comp.js
          |_AnotherComp.js
          |_YetAnotherComp.js
          |_index.js
Run Code Online (Sandbox Code Playgroud)

在 Comp.js 文件中...并执行与其他组件类似的操作:

export {Comp}
Run Code Online (Sandbox Code Playgroud)

来自index.js

export {Comp} from './Comp';
export {AnotherComp} from './AnotherComp';
export {YetAnotherComp} from './YetAnotherComp';
Run Code Online (Sandbox Code Playgroud)

现在您可以在任何地方导入

import {Comp, AnotherComp, YetAnotherComp} from './components'
Run Code Online (Sandbox Code Playgroud)


pir*_*irs 9

我有一个问题export *,undefined当我导入默认函数/类时它返回...

所以,我终于解决了它, export {default} from './MyClass'它也运作良好

  • {默认} 2 分!不知道有这么好的东西存在。 (2认同)