在JS上公开子模块是不好的做法(从*导入*)?

时间:2019-05-23 08:24:49

标签: javascript ecmascript-6

我发现我以前的同事评论是

 // TODO: Get rid of it. Don't expose to other modules.
 export * from './search.actionTypes'
 export * from './models/ISearchState'
 export * from './models/ISearchFilters'

我的问题是:

在JS上公开子模块是不好的做法?还是与代码风格有关,并取决于社区实践?

1 个答案:

答案 0 :(得分:2)

  

在JS上公开子模块是不好的做法?

绝对不是。请注意,“重新导出”不同于“导入而不是导出”。它只是创建对导入的导出名称的引用,并保留了将模块加载到实际实现中的方式。 这意味着,如果您使用捆绑程序(例如Webpack),它将“内联”最终导入,因此直接从原始模块或从重新导出模块的模块中导入都没有什么区别(除非您使用通配符导入) ,这对于树的交换总是有害的。

  

或者它与代码样式有关并且取决于社区实践?

将较大的函数/类拆分为不同的文件可保持整洁,并且通过重新导出,您可以为包创建统一的导入(即,重新导出index.js中的所有内容,然后可以import {x, y} from "/module/";)。将代码拆分为多个文件是您的个人选择,没有通用规则。

  

“待办事项:摆脱它”

您的同事对项目有更好的了解,因此他可能会看到我们所没有的东西。他可能有充分的理由写此评论,我想请他提供确切的理由(也许是从不使用出口产品,还是应有目的地对其进行保密...)。

这表示通配符重新导出有一个缺点:如果导入,您将不知道导入的功能来自何处。您应该始终喜欢命名出口。