You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

打包工具解析package.json时exports和module字段哪个优先级更高

package.json 中 module 与 exports 字段的解析优先级结论

exports 字段的解析优先级远高于顶层 module 字段,这是所有遵循Node.js官方模块解析规范的现代前端打包工具(Webpack 5、Rollup 2+、Vite、esbuild、Parcel 2+等)的统一行为。

两个字段的定位差异

  • 顶层module是早期前端生态的社区民间约定,从未进入Node.js官方规范,最早由Rollup提出、被Webpack 4及更早版本兼容,作用是标记包的ES Module格式入口,属于旧生态兼容类的遗留配置。
  • exports是Node.js 12+版本正式纳入标准的官方模块入口配置,支持按引入方式(import/require/运行环境等条件)、引用子路径精确映射入口文件,同时自带包封装能力,未在exports中显式声明的路径默认不允许外部引用。

具体解析规则

你给出的配置示例如下:

{
  "module": './index-es.js',
  "exports":{
     "." :{
       "import": "./index-es.js" 
     }
   }
}

只要package.json中存在exports配置,打包工具就会优先按exports的规则解析模块入口:

  1. 解析包主入口(即直接引用包名,比如import pkg from 'your-package')时,会匹配exports["."]下对应条件的入口路径,上述示例中用import语法引入时,就会加载./index-es.js
  2. 只要exports字段存在,打包工具就不会再回退读取顶层的module、main等旧入口字段,哪怕exports配置没有覆盖对应场景,也不会降级读旧配置,未声明的路径甚至会直接抛出解析错误。

上述示例里两个字段指向的是同一个文件,实际运行效果没有差异;如果两个字段配置的入口路径不一致,所有支持exports的环境都会以exports的配置为准。
只有当你需要兼容不支持exports的老旧工具链(比如Webpack 4、1.x版本的Rollup)时,才需要额外保留顶层module字段做降级适配。


内容的提问来源于stack exchange,提问作者homy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 10:09:46