关于`export { default } from`语法的疑问及最佳实践咨询
关于ES模块导出/重导出的三个疑问解答
1. 此处导出的default值是什么?
File A里根本没定义default导出,所以当File B用export { default } from "fileA"时,实际导出的default值是undefined。
这种写法相当于先从fileA里尝试导入名为default的成员(但fileA没有),再把这个不存在的成员导出。部分打包工具或运行时可能会抛出警告,但最终导出的结果就是undefined。
2. File B没有import语句,是否存在隐含导入?
存在。export { ... } from "模块路径"属于ES模块的**重导出(re-export)**语法,它的本质是先隐式导入目标模块里的指定成员,再把这些成员导出。整个过程不需要显式写import语句,但模块系统依然会加载fileA并完成导入操作。
3. 这种导出导入方式是否为良好实践?
得分情况判断:
- 重导出本身是合理的实践:比如用一个文件作为模块的统一入口,把多个子模块的成员聚合导出,方便外部调用(像
export * from "./lib/types"就是典型的聚合导出场景)。 - 但导出不存在的default成员是糟糕的实践:File A没有定义default,却硬要导出它的default,会导致使用者拿到
undefined,还可能造成误解(误以为fileA有default导出),完全没有意义,建议删掉这行代码。
内容的提问来源于stack exchange,提问作者Viraj Singh
相关产品推荐
相关产品推荐

