首页 > 解决方案 > 在 JS 上暴露子模块是不好的做法(import * from ...)?

问题描述

我发现我以前的同事评论如下:

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

我的问题是:

在 JS 上公开子模块是不好的做法吗?或者它可能与代码风格有关并且取决于社区实践?

标签: javascriptecmascript-6

解决方案


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

绝对不。请注意,“再导出”与“导入而不是导出”不同。它只是创建导出名称对导入的引用,并将模块加载方式留给实际实现。这意味着,如果您使用诸如 Webpack 之类的捆绑程序,它将“内联”最终导入,因此您直接从原始模块导入或从重新导出它的模块导入没有区别(除非您使用通配符导入,这对摇树总是不利的)。

或者它可能与代码风格有关并且取决于社区实践?

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

“待办事项:摆脱它”

您的同事对项目有更好的了解,因此他可能会看到我们看不到的东西。他可能有充分的理由写该评论,我会问他的确切理由(也许从未使用过导出,或者应该故意保密......)。

也就是说,通配符再导出有一个缺点:如果你导入,你将不知道导入的函数来自哪里。您应该始终更喜欢命名导出。


推荐阅读