是否需要在package.json中同时配置main与exports字段?
关于package.json中
exports与main属性的兼容问题 简单说:建议保留main属性,核心原因是为了兼容不支持exports特性的旧版工具、Node.js环境和包管理器。
具体细节:
exports是较新的特性,能实现多入口导出、条件导出(比如区分import和require语法)等进阶功能,但它的支持是从Node.js v12.7.0、Webpack 5、npm v7等版本开始的。很多仍在使用旧版环境的用户(比如Node.js v12.16之前的版本、Webpack 4及更早),他们的工具无法识别exports配置,这时候main就会作为降级的默认入口,保证包能被正常加载。- 实际配置中,你可以同时声明
main和exports,支持exports的现代工具会优先遵循exports的规则,不支持的环境则会 fallback 到main指定的文件。比如:
{ "name": "your-package", "main": "./dist/index.cjs", "exports": { ".": { "import": "./dist/index.mjs", "require": "./dist/index.cjs" }, "./foo": "./dist/foo.js" } }
- 如果你明确只面向完全支持
exports的现代环境(比如要求用户使用Node.js v16+、Webpack 5+),也可以选择移除main,但这种情况在实际场景中比较少见,大部分包为了覆盖更多用户,都会保留main作为兼容方案。
内容的提问来源于stack exchange,提问作者dwjohnston
相关产品推荐
相关产品推荐

