从 node18 开始,看 node 的更新,以及查看部分原生模块和 loader 代码,能明显的发现 cjs 正在加速成为 legacy,新品 esm 正在成为主流,甚至以后彻底取代 cjs。
前段时间,去了解下 esm 模块的具体加载实现,这块就不具体详细展开了。
通过 import 和 from 关键字(个人理解,像是语法糖,因为还提供 import() 动态函数),在解析编译时处理导入的模块,我们也可以在运行时,使用 import() 异步函数去按需加载模块。
在 esm 的 loader 中,有在使用 wasm 去解析 cjs 模块代码,提取 exports 的 keys,用于兼容 cjs 模块,见源码位置。
这里的 wasm 来自一个官方提供的包 cjs-module-lexer,在 node 目录 /deps/cjs-module-lexer 下。
在这之前,也一直没咋关注过 wasm 和 node 的 wasi,借此契机,好好了解一下。
本篇分享,围绕 cjs-module-lexer 包示例,展开探索,去看看 wasm 当前情况,以及 如何 在 node 和 浏览器中接入和使用。
更多内容详见: