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

在 package.json 中,main、module、browser、exports 这几个字段各自的作用是什么?它们之间有哪些主要区别?

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

考察说明

考察对前端工程化中 package.json 多入口字段的理解,以及在不同环境(Node.js、打包器、浏览器)下模块解析的机制。

回答思路

  1. 【回答框架 1】main 字段指向 CommonJS 格式的入口文件,是 Node.js 和旧版打包器的默认解析入口,例如 'main': 'lib/index.js'。
  2. 【回答框架 2】module 字段是给打包器(如 webpack、Rollup)识别的 ESM 入口,优先于 main 使用,但 Node.js 原生环境默认不读取。
  3. 【回答框架 3】browser 字段用于给打包器提供浏览器专用版本,当目标是浏览器环境时优先,可覆盖 main 或 module,常用于替换 Node 核心模块或处理兼容性。
  4. 【回答框架 4】exports 字段是 Node.js 12+ 和现代打包器支持的更精细的入口控制,可以定义子路径、条件导出(如 import、require、browser、development),并限制外部可访问的模块范围。
  5. 【回答框架 5】优先级方面:在支持 exports 的现代环境中,exports 优先于其他字段;否则打包器按 browser(浏览器环境)> module > main 的顺序解析;Node.js 原生环境按 exports > main 的顺序。
  6. 【关键点 1】main 是 CommonJS 入口,module 是 ESM 入口,browser 是浏览器专用入口,exports 是条件导出的高级控制。
  7. 【关键点 2】在支持 exports 的环境中,exports 优先级最高,且可指定条件如 import、require。
  8. 【关键点 3】浏览器环境下,打包器会优先选择 browser 或 module,而非 main。
  9. 【关键点 4】exports 字段可以封装内部路径,防止外部直接引用未暴露的文件。
  10. 【易错点 1】误以为 module 字段在所有环境中都被原生支持,实际上 Node.js 默认不读取 module 字段。
  11. 【易错点 2】在 exports 中遗漏 require 或 import 条件,可能导致某些环境无法正确加载。
  12. 【易错点 3】将 browser 字段视为对 Node 环境的替代,实际上它仅用于浏览器打包,Node 环境下仍使用 main 或 exports。