export from 'module' 仅批量导出目标模块的所有命名导出,不包含默认导出;若需导出默认成员,须额外写 export { default } from 'module';支持重命名(export { a as b })和命名空间导出(export as ns from 'module')。

JS 中用 export * from 'module' 可以批量导出目标模块的所有命名导出(named exports),避免逐个写 export { a, b, c },让聚合模块(比如 index.js)更简洁清晰。
它只导出命名导出,不包括默认导出
这是最关键的一点:`export * from 'x'` 不会自动导出目标模块的 default。例如:
// utils/a.js
export const foo = 1;
export function bar() {}
export default function main() {}
<p>// utils/index.js
export * from './a.js'; // ✅ foo 和 bar 被导出
// ❌ main 默认导出不会被包含进来</p>如果需要同时导出默认成员,得额外写一行:
export * from './a.js';-
export { default as default } from './a.js';或简写为export { default } from './a.js';
可重命名导出,避免冲突
当多个模块导出同名变量时,直接 export * 会报错(重复声明)。这时要用 export { xxx as yyy } 显式重命名:
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
export { foo as fooFromA } from './a.js';export { foo as fooFromB } from './b.js';- 不能混用:
export * from './a.js'; export { foo as fooFromB } from './b.js';—— 如果a.js里也有foo,就会冲突
支持嵌套聚合与路径别名(需构建工具配合)
常见项目中,你会写类似这样的入口文件:
// api/index.js
export * from './users';
export * from './posts';
export * from './comments';
<p>// 然后在其他地方:
// import { fetchUser, createPost } from '@/api'; // ✅</p>注意:路径别名(如 @/api)不是 JS 原生支持的,需在打包工具(Vite、Webpack)或 TypeScript 配置中设置别名解析,否则会报错。
替代方案:export all with namespace(TS 更友好)
TypeScript 支持 export * as ns from 'module',把整个模块导出为一个命名空间对象,适合避免污染顶层作用域:
export * as UsersAPI from './users';- 使用时:
UsersAPI.fetchUser() - JS 运行时也支持该语法(ES2020+),但注意旧环境需转译










