当前位置: 首页 > news >正文

export、export default 和 module.exports 深度解析

文章目录

    • 1. 模块系统概述
      • 1.1 模块系统对比
      • 1.2 模块加载流程
    • 2. ES Modules
      • 2.1 export 使用
      • 2.2 export default 使用
      • 2.3 混合使用
    • 3. CommonJS
      • 3.1 module.exports 使用
      • 3.2 exports 使用
    • 4. 对比分析
      • 4.1 语法对比
      • 4.2 使用场景
    • 5. 互操作性
      • 5.1 ES Modules 中使用 CommonJS
      • 5.2 CommonJS 中使用 ES Modules
    • 6. 最佳实践建议
      • 6.1 使用规范
      • 6.2 代码组织
    • 7. 常见问题与解决方案
      • 7.1 问题列表
      • 7.2 调试技巧
    • 8. 扩展阅读

1. 模块系统概述

1.1 模块系统对比

特性ES ModulesCommonJS
语法export / importmodule.exports / require
加载方式静态加载动态加载
使用场景现代前端开发Node.js 环境

1.2 模块加载流程

模块定义
模块导出
模块导入
模块使用

2. ES Modules

2.1 export 使用

// math.js
export const add = (a, b) => a + b
export const subtract = (a, b) => a - b

// main.js
import { add, subtract } from './math.js'
console.log(add(1, 2)) // 3
console.log(subtract(5, 3)) // 2

2.2 export default 使用

// math.js
const add = (a, b) => a + b
export default add

// main.js
import add from './math.js'
console.log(add(1, 2)) // 3

2.3 混合使用

// math.js
export const add = (a, b) => a + b
export default function subtract(a, b) {
  return a - b
}

// main.js
import subtract, { add } from './math.js'
console.log(add(1, 2)) // 3
console.log(subtract(5, 3)) // 2

3. CommonJS

3.1 module.exports 使用

// math.js
const add = (a, b) => a + b
module.exports = add

// main.js
const add = require('./math.js')
console.log(add(1, 2)) // 3

3.2 exports 使用

// math.js
exports.add = (a, b) => a + b
exports.subtract = (a, b) => a - b

// main.js
const math = require('./math.js')
console.log(math.add(1, 2)) // 3
console.log(math.subtract(5, 3)) // 2

4. 对比分析

4.1 语法对比

特性ES ModulesCommonJS
导出单个值export defaultmodule.exports
导出多个值exportexports
导入方式importrequire

4.2 使用场景

场景ES ModulesCommonJS
现代前端开发推荐不推荐
Node.js 环境支持推荐
浏览器环境支持不支持

5. 互操作性

5.1 ES Modules 中使用 CommonJS

// math.js (CommonJS)
module.exports = {
  add: (a, b) => a + b
}

// main.js (ES Modules)
import math from './math.js'
console.log(math.add(1, 2)) // 3

5.2 CommonJS 中使用 ES Modules

// math.js (ES Modules)
export const add = (a, b) => a + b

// main.js (CommonJS)
const math = require('./math.js')
console.log(math.add(1, 2)) // 3

6. 最佳实践建议

6.1 使用规范

  1. 现代前端项目:优先使用 ES Modules
  2. Node.js 项目:使用 CommonJS
  3. 混合项目:注意兼容性问题

6.2 代码组织

# ES Modules 项目结构
src/
├── components/
├── utils/
└── main.js

# CommonJS 项目结构
lib/
├── modules/
├── utils/
└── index.js

7. 常见问题与解决方案

7.1 问题列表

问题原因解决方案
导入失败路径错误检查路径
导出未定义导出方式错误检查导出语法
兼容性问题模块系统不匹配使用转换工具

7.2 调试技巧

  1. 控制台日志:打印模块内容
  2. 断点调试:检查模块加载
  3. 工具支持:使用 Babel 或 Webpack

8. 扩展阅读

  • ES Modules 官方文档
  • CommonJS 规范
  • 前端模块化指南

通过本文的深度解析,开发者可以全面理解 exportexport defaultmodule.exports 的区别与使用场景。建议根据项目需求选择合适的模块系统,以提升代码质量和开发效率。

在这里插入图片描述

相关文章:

  • 流水线(Pipeline)
  • JavaScript相关面试题
  • C语言的位域操作
  • 半导体可靠性测试解析:HTOL、LTOL与Burn-In
  • 【黑马点评|项目】万字总结(下)
  • 【R语言】pmax和pmin函数的用法详解
  • 【北上广深杭大厂AI算法面试题】人工智能大模型篇...矩阵乘法GEMM!以及为什么说GEMM是深度学习的核心?
  • 【云原生技术】编排与容器的技术演进之路
  • 信息系统运行管理员教程6--信息系统安全
  • 【深度解析:以“不要的心态”获取所求的本质逻辑】
  • 一周学会Flask3 Python Web开发-SQLAlchemy添加数据操作-班级模块
  • 告别XML模板的繁琐!Word文档导出,easy!
  • 穷举vs暴搜vs深搜vs回溯vs剪枝刷题 + 总结
  • 第5课 树莓派的Python IDE—Thonny
  • Gin(后端)和 Vue3(前端)中实现 Server-Sent Events(SSE)推送
  • DeepSeek + Excel:数据处理专家 具体步骤
  • 蓝桥杯备赛-二分-技能升级
  • C语言输入与输出:从零掌握数据的“对话”
  • STC89C52单片机学习——第20节: [8-2]串口向电脑发送数据电脑通过串口控制LED
  • MyBatis源码分析の配置文件解析
  • 英国收紧移民政策,技术工作签证、大学招生面临更严要求
  • 美国政府信用卡被设1美元限额,10美元采购花一两小时填表
  • 听企业聊感受,《外企聊营商》5月13日起推出
  • 泽连斯基表示将在土耳其“等候”普京
  • 非洲雕刻艺术有着怎样的“变形之美”
  • 未来之城湖州,正在书写怎样的城市未来