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

在 Node.js 环境中,使用 require 与使用 import 进行模块加载时,它们在语法、加载机制以及适用场景上有哪些主要区别?

前端/移动开发技术原理Node.js

考察说明

考查对 Node.js 中 CommonJS 与 ES Module 两种模块系统核心差异的理解。

回答思路

  1. 【回答框架 1】CommonJS 的 require 是同步加载,运行时执行,模块导出的是值的拷贝;ES Module 的 import 是静态解析,支持异步加载,导出的是值的实时绑定。
  2. 【回答框架 2】require 支持动态加载,可以在条件语句中调用;import 是静态声明,必须位于顶层,但支持动态 import() 实现按需加载。
  3. 【回答框架 3】在 Node.js 中,require 默认用于 CommonJS 模块,扩展名通常为 .js;import 用于 ES Module,扩展名通常为 .mjs,或在 package.json 中设置 type: module。
  4. 【回答框架 4】require 在加载时会执行整个模块并缓存结果;import 由于静态分析,可以更好地支持 tree-shaking,减少打包体积。
  5. 【回答框架 5】两者可以共存,但需注意互操作规则:CommonJS 模块可以被 import 默认导入,ES Module 使用 require 可能需要特殊处理。
  6. 【关键点 1】require 是同步、运行时加载,import 是静态、可异步加载。
  7. 【关键点 2】import 导出的是实时绑定,require 导出的是值拷贝。
  8. 【关键点 3】import 支持 tree-shaking,require 不支持。
  9. 【关键点 4】CommonJS 与 ES Module 的语法和模块作用域不同。
  10. 【易错点 1】不能直接在 CommonJS 模块中使用 import 而不经过转译或配置。
  11. 【易错点 2】动态 import() 返回 Promise,不能直接同步使用。