1. 模块化开发的前世今生
十年前我刚接触前端开发时,整个行业还在用script标签手动管理依赖。记得有次项目上线后,因为加载顺序问题导致页面白屏,排查到凌晨三点才发现是某个工具库没先加载。这种"刀耕火种"的开发方式,现在想来真是令人唏嘘。
随着ES6模块化标准的落地,现代前端终于有了官方的模块解决方案。export default和具名export作为模块化的核心语法,看似简单却藏着不少门道。上周review团队代码时,我发现不少三年经验的工程师仍然会混淆这两种导出方式的使用场景。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础概念解析
2.1 具名导出(named exports)
具名导出是模块化系统的基石,它允许一个模块同时暴露多个值。语法形式是在声明前添加export关键字:
javascript复制// utils.js
export const PI = 3.1415926
export function double(x) {
return x * 2
}
export class Logger {
//...
}
导入时需要解构对应名称:
javascript复制import { PI, double } from './utils.js'
console.log(double(PI)) // 6.2831852
关键特性:
- 支持批量导出(export { a, b })
- 导入时必须知道确切导出名
- 支持别名导出(export { foo as bar })
- 适合工具类模块
2.2 默认导出(default export)
每个模块可以有且仅有一个默认导出:
javascript复制// UserModel.js
export default class User {
//...
}
导入时不需要解构:
javascript复制import User from './UserModel.js'
典型场景:
- 模块主要导出一个实体时(如React组件)
- 不希望消费者关心内部命名时
- 需要快速替换实现时
3. 深度对比与实践指南
3.1 技术维度对比
| 特性 | 具名导出
