你可能已经写了很多年 ES Module (ESM) 语法的代码。比如:
import React from 'react';
但实际上,大部分 ESM 语法代码是被打包或转译成 CommonJS (CJS) 来执行的。因为以前 Node.js 和各类开发工具并不能很好地执行 ESM 模块。
但是到了 2025 年,ESM 兼容性已经有了巨大的提升,生态也有了长足的发展。各位 Node.js 和 Web 开发者们,即将迎来 CJS 向 ESM 迁移的大变革。
运行时兼容性
Node.js 20.11 增加了对 import.meta.dirname 的支持,相当于 CJS 中的 __dirname,是一个非常重要的特性。这个版本之后,Node.js 代码从 CJS 迁移 ESM 就变得更简单了。
Chrome 91 增加了对 Service Worker 中的 ESM 支持,完成了最后一块拼图。因此推荐 Chrome 91 以上。如果项目不使用 Service Worker 和 Web Worker,那么只要是 Chrome 66 (增加了 <link rel="modulepreload"> 支持)以上就能完美运行原生 ESM 代码。
Safari 15 就支持了大部分 ESM 特性,包括 Service Worker 的 ESM,但是 <link rel="modulepreload"> 支持需要 17 以上。
发表回复