50 - 《Pure ESM》

发布于 2022年2月8日

Pure ESM 是指发布的 npm 包只产出 ESM 模块类型,不再产出 CJS 格式,社区上 sindresorhus 在积极地推这件事,他维护的很多包的最新版只提供 ESM,虽然带来一些不便,但也是把社区往 ESM 方向推进。

昨晚尝试把 umi 4 迁到 Pure ESM 模式,由于遇到卡点,未果,详见 https://github.com/umijs/umi-next/pull/348 ,下面做一些记录。

1、现在是否应该迁 Pure ESM?
2、如何迁移?
3、有啥跨不过去的坑?
4、esm 里可以引用 cjs 的包吗?

是否应该迁?想推着社区快速前进?用 Pure ESM。只给 browser 渲染用的包?用 Pure ESM。否则,还是同时产出 CJS + ESM 吧,减少用户在使用时的挫败感。比如 1)用户是 CJS,可以引 ESM,但由于 ESM 的特性,必须改成异步的方式引用,require(‘foo’) 改成 await import(‘foo’);2)Electron Main 端暂无法使用 ESM,需要一些额外手段,比如先把依赖打包好。

如何迁移?TypeScript 项目参考 https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm ,我再补几个注意实现。

1、package.json 中 "exports": "./index.js" 可以改成 "exports": { ".

内容预览已结束

此内容需要会员权限。请先登录以查看完整内容。