Nodes.js 22 带来的重大收益
Node.js 22 放宽了 CommonJS 模块和 ESM 模块的互操作限制。允许在 CommonJS 模块通过 require(“esm modules”) 导入 ESM 文件。 但是在 esm 文件中存在顶层的 await ,则不允许使用 require() 导入。
这个特性带来的重大意义:大部分 NPM 包可以不用再提供 CommonJS 和 ESM 的产物,只提供 ESM 产物即可。ESM 产物已经被大部分浏览器所支持。 未来工程化可能会越来越简单了。
- 执行 package.json 中的脚本
- 功能:新增实验性功能,通过 CLI 标志 noderun –
执行 package.json 中的脚本。 - 示例:node –run test 将执行 package.json 中的 test 命令。
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。