前端/移动开发面试题更新 2026-08-05

在符合ESM和CommonJS规范的前提下,export、export default 以及 module.exports 这三者在使用方式、导出内容限制和导入方式上有何不同?

前端/移动开发技术原理方案权衡Node.js

考察说明

考查对ES Module和CommonJS模块导出机制的理解,以及它们在实际使用中的差异。

回答思路

  1. 【回答框架 1】export为ESM的命名导出,一个模块可拥有多个命名导出,导入时需使用相同的名称并配合花括号,例如import { a } from 'module'。export支持导出变量、函数、类等,但必须是模块顶层的声明。
  2. 【回答框架 2】export default为ESM的默认导出,一个模块只能有一个,导入时可以自定义名称,例如import x from 'module'。默认导出可以是任意值,包括匿名函数或类,但不允许与命名导出混用的陷阱。
  3. 【回答框架 3】module.exports属于CommonJS规范,在Node.js环境中使用,通过给module.exports赋值来导出整个对象,通常用于导出单个对象或函数。它与exports对象的关系是:exports是module.exports的引用,直接给exports赋值会切断引用。
  4. 【回答框架 4】两者的核心差异在于规范不同:ESM是静态解析,支持tree-shaking,而CommonJS是动态加载。在实际工程中,经常需要处理跨模块系统的互操作,例如在Node.js中使用ESM时,需通过Babel或Node的ESM支持,而import默认导入对应module.exports导出的值。
  5. 【关键点 1】export为命名导出,需要具名导入;export default为默认导出,可自定义导入名。
  6. 【关键点 2】module.exports属于CommonJS,exports是module.exports的引用,直接赋值exports会失效。
  7. 【关键点 3】ESM静态解析,支持tree-shaking;CommonJS动态加载。
  8. 【关键点 4】在ESM中导入CommonJS模块时,默认导入的是module.exports的值。
  9. 【易错点 1】容易将exports与module.exports混用,直接给exports赋值导致导出无效。
  10. 【易错点 2】误以为export default可以导出多个,实际每个模块只能有一个默认导出。
  11. 【易错点 3】在Node.js中混合使用ESM和CommonJS时,若无转译工具,可能因模块系统不匹配导致导入失败。