javascript - 在 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 上公开子模块是不好的做法吗?或者它可能与代码风格有关并且取决于社区实践?
解决方案
在 JS 上公开子模块是不好的做法吗?
绝对不。请注意,“再导出”与“导入而不是导出”不同。它只是创建导出名称对导入的引用,并将模块加载方式留给实际实现。这意味着,如果您使用诸如 Webpack 之类的捆绑程序,它将“内联”最终导入,因此您直接从原始模块导入或从重新导出它的模块导入没有区别(除非您使用通配符导入,这对摇树总是不利的)。
或者它可能与代码风格有关并且取决于社区实践?
将较大的函数/类拆分到不同的文件中可以保持干净,并且通过重新导出,您可以为您的包创建统一的导入(即重新导出 index.js 中的所有内容,然后就可以了import {x, y} from "/module/";
)。是否将代码拆分为多个文件是您的个人选择,没有通用规则。
“待办事项:摆脱它”
您的同事对项目有更好的了解,因此他可能会看到我们看不到的东西。他可能有充分的理由写该评论,我会问他的确切理由(也许从未使用过导出,或者应该故意保密......)。
也就是说,通配符再导出有一个缺点:如果你导入,你将不知道导入的函数来自哪里。您应该始终更喜欢命名导出。
推荐阅读
- ms-access - MS Access 子表单的多个分离条件
- javascript - jestjs 如何测试使用 performance.now() 的函数?
- cordova - 使用可访问的资源构建电子窗口应用程序
- spring-boot - 是否可以在同一个 springboot 应用程序中配置 jmsTemplate 主题发布者和队列消息生产者
- python - 类装饰器禁用 __init_subclass__
- c# - 在不同页面上使用数据访问层调用方法不会更新数据库
- python - 在python中正确转义反斜杠
- python-3.x - 如何根据多个键对嵌套字典进行排序
- jquery - jQuery滚动功能上的CSS边框消失
- r - devtools::install_github 错误:SEC_E_UNTRUSTED_ROOT - 证书链由不可靠的实体颁发