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

CommonJS淘汰后,JavaScript库package.json的main字段该如何配置?

停止分发CommonJS版本时package.json的"main"字段处理方案

当JavaScript包维护者决定不再提供CommonJS版本时,针对"main"字段有两种合理的处理方式,具体取决于你的目标兼容场景:

方案1:将"main"指向ES模块入口

直接把"main"的值设置为和"module"、"exports"一致的ES模块路径,示例如下:

"type": "module",
   "module": "dist/pretty-print-json.js",
   "browser": "dist/pretty-print-json.min.js",
   "main": "dist/pretty-print-json.js",
   "types": "dist/pretty-print-json.d.ts",
   "files": ["dist"],
   "exports": "./dist/pretty-print-json.js",

适用场景

  • 需要兼容不支持"exports"字段的老旧打包工具或运行环境,这类工具可能会优先读取"main"作为入口,设置为ES模块路径能保证它们加载到正确的模块(前提是这些工具已支持ES模块)。
  • 希望保持package.json字段的完整性,避免部分工具因缺失"main"而抛出异常。

方案2:直接移除"main"字段

如果你的包目标用户都使用支持"exports"的现代Node.js版本和打包工具,可以直接删掉"main"字段,示例如下:

"type": "module",
   "module": "dist/pretty-print-json.js",
   "browser": "dist/pretty-print-json.min.js",
   "types": "dist/pretty-print-json.d.ts",
   "files": ["dist"],
   "exports": "./dist/pretty-print-json.js",

适用场景

  • 包的使用者均采用Node.js 12.7+(该版本开始稳定支持"exports")或现代打包工具(如Webpack 5+、Rollup 2+),这些环境会优先读取"exports",完全不需要依赖"main"。
  • 希望精简package.json,移除冗余字段。

关键说明

根据Node.js官方规则,当包存在"exports"字段时,通过包名导入时"exports"的优先级高于"main",所以无论选择哪种方案,Node.js本身都会正确加载ES模块入口。差异仅体现在对老旧工具的兼容性上。

内容的提问来源于stack exchange,提问作者Pilaf T. Pilafian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:55:00