Oasis's Cloud

一个人的首要责任,就是要有雄心。雄心是一种高尚的激情,它可以采取多种合理的形式。
—— 《一个数学家的辩白》

Nodes.js 22 带来的重大收益

作者:oasis


Node.js 22 放宽了 CommonJS 模块和 ESM 模块的互操作限制。允许在 CommonJS 模块通过 require(“esm modules”) 导入 ESM 文件。 但是在 esm 文件中存在顶层的 await ,则不允许使用 require() 导入。

这个特性带来的重大意义:大部分 NPM 包可以不用再提供 CommonJS 和 ESM 的产物,只提供 ESM 产物即可。ESM 产物已经被大部分浏览器所支持。 未来工程化可能会越来越简单了。

TypeScript 5.8 的支持 - –module nodenext 标志: - TypeScript 5.8 引入了 –module nodenext 标志。 - 当启用该标志时,TypeScript 不会报错,允许 CommonJS 文件通过 require() 导入 ESM 文件。 - 注意事项: - 由于此特性可能被回溯到旧版本的 Node.js,目前没有稳定的 –module nodeXXXX 选项支持此行为。 - 未来版本的 TypeScript 可能会在 node20 下稳定支持此特性。 - 建议: - 使用 Node.js 22 或更高版本的用户应启用 –module nodenext。 - 使用旧版本 Node.js 的用户应继续使用 –module node16 或更新到 –module node18。