ESM 中的 export * from写法

文章类型:Javascript

发布者:hp

发布时间:2025-04-18

一:引言

我们在模块导出时候,有多种选择,那么export * from方式有什么不同呢?

二:作用

1:export * from "a.js" 是一种模块重导出的语法,

2:批量重导出,会将所有命名导出(named exports)重新导出到当前模块

3:不包含默认导出,不会重导出默认导出(export default),如要导出需显示处理

三:细节

1:命名冲突处理:通过显示重命名解决

export { a as aFromModule } from "./a.js";

2:顺序不影响覆盖:ESM不允许同名导出存在,跟位置顺序无关


3:多模块聚合:常用于多个模块导出到一个入口文件

// index.js
export * from "./a.js";
export * from "./b.js";

四:代码

// a.js
export const name = "a";
export function log() { console.log(name); }

// current.js
export * from "./a.js";  //name和log
// a.js
export default "default";
export const key = "value";

// current.js
export * from "./a.js";             // 仅导出 key
export { default as aDefault } from "./a.js"; // 显式导出默认

五:总结

1:简化模块的批量重导出,适合模块组织和代码复用

2:仅重导出命名导出,默认导出需要单独处理

3:避免命名冲突,苟泽导致静态错误

4:常用于创建模块入口或库的公共API