可以混合使用默认导出和命名导出,一个模块可有一个默认导出(主接口)和多个命名导出(辅助内容),导入时需区分语法:默认导出不加花括号,命名导出必须用花括号。

可以混合使用,默认导出 + 多个命名导出是合法语法,但需注意导入方式和设计意图。
混合导出的写法
一个模块文件中,既可以用 export default 导出主功能,又可以用 export(命名导出)提供辅助内容:
- 默认导出只能有一个,通常代表模块的“主要接口”,比如一个组件、主类或核心函数
- 命名导出可有多个,适合工具函数、常量、类型定义等辅助内容
- 两者可共存,无需额外修饰或包装
示例(math.js):
export const PI = 3.14159;
export function multiply(a, b) { return a * b; }
对应导入方式
导入时要区分默认与命名部分,不能混在同一个大括号里:
- 默认导出:直接写变量名,不加花括号
- 命名导出:必须用花括号包裹,名称需匹配(或用 as 重命名)
- 可同时导入,默认部分放前面,命名部分放后面,用逗号分隔
示例(main.js):
console.log(add(2, 3)); // 5
console.log(PI); // 3.14159
console.log(multiply(2, 3)); // 6
注意事项与建议
虽然语法支持混合,但实际工程中需权衡可维护性:
- 混合导出容易让模块职责模糊——用户不确定该用默认名还是具名名调用
- Tree-shaking 更友好于纯命名导出,因为默认导出可能隐式引入整个模块
- 如果模块导出的是一个类,且附带静态方法或常量,推荐统一用命名导出:
export { MyClass, VERSION, helpers } - 若确实需要混合(如 Vue 组件文件导出组件本身 + 类型/工具),确保文档或命名清晰,例如:
export default Component; export const props = [...];
避免常见错误
以下写法会报错或行为异常:
-
import { add, PI } from './math.js'—— 漏掉默认导出,add不在命名导出中,会是undefined -
import add, PI from './math.js'—— 缺少花括号,PI会被当作默认导入,报错 - 同一模块多次
export default—— 语法错误,只允许一个 - 试图用
export { default as xxx }重导出默认项为命名项 —— 这属于“重导出”,不是混合导出本身,需单独写:export { default as MainFunc } from './other.js';
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











