这篇文章的标题是《Move on to ESM-only》(转向仅使用ESM),作者Antfu分享了他对仅使用ESM(ECMAScript模块)的看法,并讨论了当前生态系统中ESM的采用情况以及转向仅使用ESM的必要性。以下是文章内容的翻译及Markdown格式整理:
Move on to ESM-only
The Toolings are Ready
Modern Tools
- Top-Down & Bottom-Up:从底层库到高层框架,ESM的采用正在逐步推进。
- Requiring ESM in Node.js:Node.js现在支持直接
require()
ESM模块,这使得ESM和CJS之间的互操作性更加顺畅。
The Troubles with Dual Formats
- Interop Issues:CJS和ESM之间的互操作性问题仍然存在,尽管Node.js提供了
require()
ESM的支持,但仍然有许多复杂的情况需要处理。 - Dependency Resolution:双格式包可能导致依赖解析问题,尤其是当一个包依赖于仅提供ESM的包时。
- Package Size:双格式包会增加包的大小,这在依赖项众多的项目中可能导致
node_modules
目录膨胀。
When Should We Move to ESM-only?
New Packages
- New Packages:所有新包都应该作为ESM-only发布,因为没有遗留依赖需要考虑。
- Browser-targeted Packages:如果一个包主要面向浏览器,那么发布为ESM-only是有意义的,因为ESM在静态分析和树摇优化方面具有显著优势。
- Standalone CLI:对于独立的CLI工具,使用ESM可以促进整个生态系统的ESM过渡。
- Node.js Support:如果一个包面向最新版本的Node.js,那么现在是考虑转向ESM-only的好时机,尤其是Node.js最近增加了对
require(ESM)
的支持。 - Know Your Consumers:如果一个包已经有了一定的用户基础,那么了解依赖项的状态和需求至关重要。例如,如果一个ESLint插件需要ESLint v9,而ESLint v9的新配置系统即使在CJS项目中也原生支持ESM,那么就没有理由不将其作为ESM-only发布。
How Far We Are?
- ESM Adoption Over Time:ESM的采用正在逐步增加,从2021年的7.8%增长到2024年底的25.8%。
- Node Modules Inspector:作者开发了一个名为Node Modules Inspector的工具,用于分析包的依赖项,提供关于依赖项的ESM采用状态的见解,并帮助识别在迁移到ESM时可能遇到的问题。
Moving Forward
- Gradual Transition:作者计划逐步将他维护的包迁移到ESM-only,并更仔细地查看我们依赖的包。
- Node Modules Inspector:该工具仍处于早期阶段,但作者希望它将成为包作者和维护者跟踪依赖项的ESM采用进展和做出关于转向ESM-only的明智决策的宝贵资源。
希望这个Markdown格式的内容对你有帮助!