标准答案
- main 是传统入口,exports 可以按条件和子路径控制可导入范围,通常优先级更高。
- type 决定 .js 默认按 CommonJS 还是 ESM 解释,.cjs/.mjs 可显式指定。
- module 是部分工具生态使用的约定,不等于 Node 原生统一标准。
- exports 变严格后,深层路径导入可能突然失败,需要提供兼容入口和迁移说明。
题目解析
main 是传统入口,exports 可以限制公开入口并按条件返回不同文件,type 和 cjs/mjs 决定模块解释方式。module 多是工具生态约定,不应当被当作 Node 原生统一字段。
exports 变严格后,消费者原来直接导入的深层路径可能失败;发布库要列出公共 API、类型声明、Node 条件和浏览器/打包器条件,并做真实消费者测试。
模块入口的兼容性属于发布契约。修改 type、exports 或文件布局时要测试 CommonJS、ESM、TypeScript、测试器、打包器和不同 Node 版本。
常见误区
- 误区:只配置 main 不测试 ESM。改正:按支持范围测试 require、import、类型声明和条件导出。
- 误区:exports 隐藏旧公共子路径却不提供迁移。改正:保留兼容入口或发布明确的迁移版本和说明。
- 误区:type 改动后忽略测试脚本和构建工具。改正:验证所有执行入口、脚本和生产启动命令。