前端知库

Node.js 的 package exports 会怎样影响模块解析?

理解 package.json 的 exports、条件导出和子路径封装,避免浏览器构建与 Node 运行时解析结果不一致。

参考答案

exports 可以定义包的公开入口和子路径,并阻止消费者通过未声明的内部路径导入文件。它还支持条件导出,例如 import、require、node 和 default,但条件顺序和工具支持会影响最终解析结果。

发布库时要同时考虑 ESM、CommonJS、类型声明、浏览器构建器和 Node 版本。不能只把 main 改成 exports 就认为兼容;应在目标环境分别测试入口、子路径、类型提示和打包结果。imports 主要用于包内部的私有映射,不等同于对外 API。

封装内部文件有助于稳定 API,但也可能让旧的深层导入突然失败。升级前需要记录公开入口并提供迁移说明,避免把构建工具偶然能解析当成 Node 官方解析规则。